软键盘应用
触摸一体机没有硬件键盘,系统软键盘占面积大,位于屏幕底部,点击不是很方便。某些时候只需要输入数字,这时弹出九宫格数字键盘就足够了。
以下实现的是弹出一个弹窗作为软键盘。
实现
-
创建一个窗体
FrmSoftKey
,将FormBorderStyle
设置为none
,将startPosition
设置为Manual
-
将一个文本框
textBox1
和需要的按钮拖入,调整样式,如图
-
按钮命名:
0~9
按钮分别命名为btn_0 ~ btn_9
,-
和.
分别命名为btn_A
和btn_B
,退出、删除、确定分别命名为btnESC
、btnCLR
、btnENT
, -
绑定事件,事件代码如下
public partial class FrmSoftKey : Form
{
public FrmSoftKey()
{
InitializeComponent();
}
private string str = "";
public string Str { get { return str; } set { str = value; Invalidate(); } }
void btn_A_Click(object sender, EventArgs e)
{
textBox1.Text += "-"; textBox1.SelectionStart = textBox1.Text.Length;
}
void btn_B_Click(object sender, EventArgs e)
{
textBox1.Text += "."; textBox1.SelectionStart = textBox1.Text.Length;
}
void btn_Click(object sender, EventArgs e)
{
Button B = (Button)sender;
textBox1.Text += B.Name.Substring(4, 1);
textBox1.SelectionStart = textBox1.Text.Length;
}
void btnESC_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
textBox1.Text = string.Empty;
}
}
void btnCLR_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
textBox1.Focus();
textBox1.SelectionStart = textBox1.Text.Length;
}
public event EventHandler BtnTestClick;
void btnENT_Click(object sender, EventArgs e)
{
str = textBox1.Text;
textBox1.Text = "";
FrmInputDialog.Password = str;//将输入的字符串传给主窗体
this.Dispose();
this.Close();
}
}
名字和事件名对应的按钮绑定对应的 click
事件,btn_0~btn_9
的 Click
全部绑定到 btn_Click
事件
可以一次选中10个按钮,绑定 btn_Click 事件
5. 至此软键盘窗体已经设计完成,接下来是使用。
将键盘与文本框textBox1
绑定(该文本框位于主窗体,弹出的软键盘是个子窗体),
主窗体中添加静态变量
public static string Password { get; set; }
textbox1
添加MouseClick
事件,
private void tb_pwd_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
TextBox textBox = (TextBox)sender;
// 获取 TextBox 的屏幕位置
Point textboxLocation = textBox.PointToScreen(Point.Empty);
// 创建一个新的窗体
FrmSoftKey frmSoftKey = new FrmSoftKey();
frmSoftKey.Str = "";
// 计算窗体的位置
int popupX = textboxLocation.X;
int popupY = textboxLocation.Y + textBox.Height;
// 设置窗体的位置
frmSoftKey.Location = new Point(popupX, popupY);
// 显示窗体
frmSoftKey.ShowDialog();
tb_pwd.Text = Password;
Close();
}
}
总结
-
点击之后软键盘会出现在
textbox
的下方。
通过frmSoftKey.Location = new Point(popupX, popupY);
这行代码设置窗体弹出的位置,如果StsrtPosition
没有设置为manual
这一步将不会生效。
-
代码中的
Password
为静态变量,软键盘子窗体通过这个静态变量将输入内容传给主窗体,可以自定义一个名字。