如何在C#中设计键盘?
我是C#新手,我计划设计自己的键盘,但我不知道如何/从哪里开始。如图所示,我有4个文本框和键盘按钮 我想到的第一个问题是:如何检测光标位置(光标在哪个文本框中?) 因此,例如,如果我只有一个文本框,那么我可以很容易地在按钮1:textBox1.text=“1”和按钮2:textBox1.text=“2”的内部和按钮A:textBox1.text=“A”的内部进行书写。。。。以此类推,但我有4个文本框,这是令人困惑的 你能给我一个想法,或者在每个按钮里面写些什么,以便在光标所在的文本框中打印它的值吗 谢谢专业人士如何在C#中设计键盘?,c#,C#,我是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();”我试过了,但没用,所以你的效果很好。谢谢你这和我的答案差不多,只是没那么好^我迟到了。。。思考和测试-这需要我一些时间…;-)