C#制作软键盘
c#制作软键盘,先来个图。
上面这个图是制作的最终结果显示。
在制作键盘的时候,总体来说还是比较简单的,只有几个地方比较复杂一点。布局什么的我就不说了,这里所有的按键都是按钮,在网上也看到过有用图片弄得,但是感觉那种效果不是很好,可塑性太差了。下面分步骤说一下我这里是怎么做的:
1、每次按完按键之后光标显示在最上面的文本框中,这里文本框为textbox。
这个问题我在编写之前并没有发现,可当用的时候发现,如果不进行设置,在点击按钮之后,文本框中根本没有光标。这样在输入空格的时候根本就不知道输入到哪了。那么这个应该怎么做呢?
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //导入寻找windows窗体的方法
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd); //导入为windows窗体设置焦点的方法
在窗体类中加入上面代码。本程序中窗体类指的是:public partial class Edit : Form。这个下面,所有的winform窗体都会有一个类继承form类。
然后在每个按钮的点击方法中加入下列语句:
textBox.Focus();
//设置光标的位置到文本尾
textBox.Select(textBox.Text.Length, 0);
//滚动到控件光标处
textBox.ScrollToCaret();
这样,在点击按钮后会发现光标会在textbox中了。2、backspace按键
在做到backspace按键的时候,怎么才能删除文本框中的内容,像我们电脑的键盘一样呢?跟1中的相似。首先在窗体类中加入下述代码:
[DllImport("USER32.DLL")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); //导入模拟键盘的方法
接下来,下backspace按键的点击方法中加入下列代码:
SendKeys.Send("{BACKSPACE}");
这个是使这个按钮模拟电脑上的backspace按键的功能。可能有人会有疑惑,我怎么知道我删除的是哪里的内容。因为每次我们在按键的时候都是将光标放在了textbox的末尾,所以每次删除的都是textbox中的内容。
3、caps lock 和 shift功能
这个我实现的方法是在文本框的下面添加两个lable,caps和shift各一个,用来显示两个按键是否按下。默认设置为不可见。也就是 Label_Shift.Visible = false;
然后设置两个标志位,如下
private bool Shift = false;
private bool Caps_Lock = false;
这里举一个例子,shift按钮:代码如下:
private void button_shift_Click(object sender, EventArgs e)
{
switch (Shift)
{
case false:
{
Label_Shift.Visible = true;
Shift = true;
break;
}
case true:
{
Label_Shift.Visible = false;
Shift = false;
break;
}
}
textBox.Focus();
//设置光标的位置到文本尾
textBox.Select(textBox.Text.Length, 0);
//滚动到控件光标处
textBox.ScrollToCaret();
}
这里右shift和caps lock的是一样的。这里就不在多说了。
办法笨了一些,但是比较简单,适用于初学者,速度还可以。
效果图如下:
上一篇: 时间选择器组件之关于table走过的弯路
下一篇: vtable伪造