C#winform自定义软键盘

软键盘应用

触摸一体机没有硬件键盘,系统软键盘占面积大,位于屏幕底部,点击不是很方便。某些时候只需要输入数字,这时弹出九宫格数字键盘就足够了。
以下实现的是弹出一个弹窗作为软键盘。

实现

  1. 创建一个窗体FrmSoftKey,将FormBorderStyle设置为none,将startPosition设置为Manual

  2. 将一个文本框textBox1和需要的按钮拖入,调整样式,如图
    C#winform自定义软键盘_第1张图片

  3. 按钮命名: 0~9 按钮分别命名为 btn_0 ~ btn_9-. 分别命名为 btn_A btn_B ,清空、删除、确定分别命名为 btnCLRbtnDELbtnENT

  4. 绑定事件,事件代码如下

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 btnCLR_Click(object sender, EventArgs e)
    {
        if (textBox1.Text.Length > 0)
        {
            textBox1.Text = string.Empty;
        }
    }
    void btnDEL_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_9Click 全部绑定到 btn_Click 事件
C#winform自定义软键盘_第2张图片
可以一次选中10个按钮,绑定 btn_Click 事件
C#winform自定义软键盘_第3张图片
C#winform自定义软键盘_第4张图片
5. 至此软键盘窗体已经设计完成,接下来是使用。
将键盘与文本框tb_pwd绑定(该文本框位于主窗体,弹出的软键盘是个子窗体),
主窗体中添加静态变量

public static string Password { get; set; }

tb_pwd添加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();
    }
}

总结

  1. 点击之后软键盘会出现在textbox的下方。
    通过frmSoftKey.Location = new Point(popupX, popupY);这行代码设置窗体弹出的位置,如果StsrtPosition没有设置为manual这一步将不会生效。
    C#winform自定义软键盘_第5张图片

  2. 代码中的Password为静态变量,软键盘子窗体通过这个静态变量将输入内容传给主窗体,可以自定义一个名字。

你可能感兴趣的:(C#遇到的问题及解决方法,c#)