如何在C#中设计键盘?

时间:2015-11-12 20:27:07

标签: c#

我是C#的新手,我正计划设计自己的键盘,但我不知道如何/从哪里开始。如照片所示,我有4个文本框的键盘按钮。

我想到的第一个问题是:如何检测光标位置(哪个textBox是光标?)。

因此,例如,如果我只有一个文本框,那么我很容易在button1中写入:textBox1.text =" 1"在button2内:textBox1.text =" 2"并且在button_A:textBox1.text =" A" ....等等但我有4个文本框,这让人感到困惑。

请您在每个按钮内向我提供一个想法或写些内容,以便在光标所在的文本框中打印其值。

谢谢专业人士。

Photo

5 个答案:

答案 0 :(得分:3)

首先,有一个文本框代表所选择的文本框(在子例程之外但在类中):

TextBox SelectedTextBox = null;

然后制作"点击"每个TextBox的事件如下所示:

private void textBoxNUM_Click(object sender, EventArgs e)
{
    SelectedTextBox = sender as TextBox;
}

然后制作"点击"每个Button的事件如下所示:

private void buttonNUM_Click(object sender, EventArgs e)
{
    if (SelectedTextBox != null)
    {
        SelectedTextBox.Text = buttonNUM.Text;//Or set it to the actual value, whatever.
    }
}

如果那个不起作用,这应该是。

private void buttonNUM_Click(object sender, EventArgs e)
{
    if (SelectedTextBox != null)
    {
        (SelectedTextBox as TextBox).Text = buttonNUM.Text;//Or set it to the actual value, whatever.
    }
}

答案 1 :(得分:0)

要检查文本框是否有焦点,您可以执行

if(textbox1.Focused)
{
  //Print the value of the button to textbox 1
}
else if (textbox2.Focused)
{
  //Print the value to textbox 2
}

更新:

由于单击按钮时文本框将失去焦点,因此您应该有一个临时文本框(即lastTextboxThatWasFocused),每次文本框获得焦点时都会保存该文本框。编写一个OnFocused方法并执行类似

的操作
public void Textbox1OnFocused(/*Sender Event Args*/)
{
   lastTextboxThatWasFocused=textbox1;
}

然后点击按钮即可

if(lastTextboxThatWasFocused.Equals(textbox1))
{
  //ETC.
}

答案 2 :(得分:0)

你可以试试这些方面。为按钮创建一个通用的单击处理程序,然后将值从按钮分配给文本框,该文本框恰好是值。您可以在TextBoxes的Click事件中查看哪个框是最后一个框。创建一个全局变量来存储哪一个并在下面的方法中使用它。

        private TextBox SelectedTextBox { get; set; }

    private void NumericButton_Click(object sender, EventArgs e)
    {
        var clickedBox = sender as Button;

        if (clickedBox != null)
        {
            this.SelectedTextBox.Text += clickedBox.Text;
        }
    }

    private void TextBox_Click(object sender, EventArgs e)
    {
        var thisBox = sender as TextBox;

        if (thisBox == null)
        {
            return;
        }
        this.SelectedTextBox = thisBox;
    }

答案 3 :(得分:0)

试试这段代码:

TextBox LastTxtBox;

private void textBox_Enter(object sender, EventArgs e)
    {
        LastTxtBox = sender as TextBox;
    }

private void button_Click(object sender, EventArgs e)
    {
        LastTxtBox.Text = this.ActiveControl.Text;
    }

textBox_Enter函数添加到所有文本框中输入event。
button_Click添加到所有按钮点击事件。

答案 4 :(得分:0)

<块引用>

按钮进入事件

    Control _activeControl;
    private void NumberPadButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        if (_activeControl is TextBox || _activeControl is RichTextBox)
        {
            _activeControl.Text += btn.Text;
            if (!_activeControl.Focused) _activeControl.Focus();
        }
    }

   
<块引用>

TextBox 或 RihTextBox 输入事件

    private void TextBoxEnter_Click(object sender, EventArgs e)
    {
        _activeControl = (Control)sender;
    }