如何在C#中设计键盘?

如何在C#中设计键盘?,c#,C#,我是C#新手,我计划设计自己的键盘,但我不知道如何/从哪里开始。如图所示,我有4个文本框和键盘按钮 我想到的第一个问题是:如何检测光标位置(光标在哪个文本框中?) 因此,例如,如果我只有一个文本框,那么我可以很容易地在按钮1:textBox1.text=“1”和按钮2:textBox1.text=“2”的内部和按钮A:textBox1.text=“A”的内部进行书写。。。。以此类推,但我有4个文本框,这是令人困惑的 你能给我一个想法,或者在每个按钮里面写些什么,以便在光标所在的文本框中打印它的值

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

我想到的第一个问题是:如何检测光标位置(光标在哪个文本框中?)

因此,例如,如果我只有一个文本框,那么我可以很容易地在按钮1:textBox1.text=“1”和按钮2:textBox1.text=“2”的内部和按钮A:textBox1.text=“A”的内部进行书写。。。。以此类推,但我有4个文本框,这是令人困惑的

你能给我一个想法,或者在每个按钮里面写些什么,以便在光标所在的文本框中打印它的值吗

谢谢专业人士


要检查文本框是否聚焦,可以执行以下操作

if(textbox1.Focused)
{
  //Print the value of the button to textbox 1
}
else if (textbox2.Focused)
{
  //Print the value to textbox 2
}
if(lastTextboxThatWasFocused.Equals(textbox1))
{
  //ETC.
}
更新:

由于单击按钮时文本框将失去焦点,因此您应该有一个临时文本框(即LastTextBox thatFocused),每次文本框获得焦点时都会保存该文本框。写一个专注的方法,然后像

public void Textbox1OnFocused(/*Sender Event Args*/)
{
   lastTextboxThatWasFocused=textbox1;
}
然后按一下按钮,你就可以做了

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

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

        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;
    }

首先,有一个文本框,表示所选的文本框(在子例程外部,但在类内部):

然后使每个文本框的“单击”事件如下所示:

private void textBoxNUM_Click(object sender, EventArgs e)
{
    SelectedTextBox = sender as TextBox;
}
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 textBoxNUM_Click(object sender, EventArgs e)
{
    SelectedTextBox = sender as TextBox;
}
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.
    }
}
请尝试以下代码:

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\u Enter
功能添加到所有文本框Enter事件中。
按钮添加到所有按钮单击事件中

按钮输入事件

TextBox或RihTextBox输入事件


但一旦他点击按钮,焦点将不再在文本框上,不?创建一个变量,例如
int lastSelectedTextBox=0,当用户单击/聚焦/选择文本框时,相应地更改值。现在,当用户按下拨号盘
上的按钮,切换变量上的
,并更改相应文本框的文本时。您确实不应该重新实现键盘等基本功能。尝试调用内置虚拟键盘。就像这里的一个:@Agent_L OP说他是新来的,所以他正在试水。如果你真的想自己制作键盘,那么
按钮是错误的选择,因为它会把焦点从文本框上移开。你应该寻找一些根本不会聚焦的低级控件。当你点击按钮时,文本框会失去焦点,另外,
Focused
是一个属性而不是一个方法。此外,OP只想检测鼠标在哪个控件中,而不是哪个控件有焦点。@sab669我修复了前两个问题。他怎么能同时点击按钮并进入文本框?问题是他需要代码来知道将文本放入四个文本框中的哪一个。你应该在这些调用中添加空检查。如果传入的发件人不是文本框,它将抛出NullReferenceExceptions。这是正确答案。此外,还要确保将处理程序添加到设计器中的
InitializeComponent
方法中。示例:
this.textBox2.Click+=newsystem.EventHandler(this.textBox2\u Click)谢谢你的回答。您知道如何在加载表单时将光标焦点设置在textBox1上吗?谢谢你在表单的“加载”事件(或构造器)中放入“textBox1.Select();”大多数互联网上都说使用“textbox.focus();”我试过了,但没用,所以你的效果很好。谢谢你这和我的答案差不多,只是没那么好^我迟到了。。。思考和测试-这需要我一些时间…;-)