在表格编号C#

时间:2015-08-05 22:27:01

标签: c# winforms visual-studio-2013 windows-forms-designer

我想在表单中添加一个数字键盘,以使程序更友好。我在这个表单上有多个文本框,当按下回车键时会改变焦点。

我尝试了SendKeys.Send(“#”),但当我点击按钮时,它只是将焦点更改为按钮,并且在我尝试输入的文本框中没有任何操作。

是否有指南或其他内容?我看了,我能找到的所有屏幕键盘都在表格之外工作,但不在里面。

1 个答案:

答案 0 :(得分:4)

从Hans Passant那里扩展一下这个想法,你可以用它作为起点。

表格

在表单中添加所需的文本框和PictureBox。图片框将包含一个图像,其中包含用户需要输入的字符。

将属性Image设置为image file(浏览)(或创建自己的属性)
将属性SizeMode设置为AutoSize,以便显示完整的图片。

接下来转到事件并为MouseClick添加一个事件处理程序。

代码

将以下代码添加到处理程序:

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
    // how many rows and columns do we have
    // in the picture used
    const int maxrows = 4;
    const int maxcols = 3;

    // based on each position (numbered from left to right, top to bottom)
    // what character do we want to add the textbox 
    var chars = new [] {'1','2','3','4','5','6','7','8','9', '+', '0', '-'};

    // on which row and col is clicked, based on the mouse event
    // which hold the X and Y value of the coordinates relative to 
    // the control.
    var  row = (e.Y * maxrows) / this.pictureBox1.Height;
    var col = (e.X * maxcols) / this.pictureBox1.Width;

    // calculate the position in the char array
    var scancode = row * maxcols + col;

    // if the active control is a TextBox ...
    if (this.ActiveControl is TextBox)
    {
        // ... add the char to the Text.
        // add error and bounds checking as well as 
        // handling of special chars like delete/backspace/left/right
        // if added and needed
        this.ActiveControl.Text += chars[scancode];
    }
}

代码是我认为自我解释。请记住,此处没有任何错误检查。

结果

最终结果如下:

numpad entering textboxes