欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#制作软键盘

程序员文章站 2022-05-07 22:33:16
...

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的是一样的。这里就不在多说了。

办法笨了一些,但是比较简单,适用于初学者,速度还可以。

效果图如下:

C#制作软键盘