积极答复者
一个很简单有很坑的问题,大神一定要看看,不看会后悔

问题
-
代码如下:
首先在窗体的Load事件中添加如下代码:
private void FrmCPanel_Load(object sender, EventArgs e)
{
this.testRepeat.Focus();
this.testRepeat.Select();
}然后,在对窗体添加一个KeyDown事件:
private StringBuilder sbText = new StringBuilder();
private string sbText1 = string.Empty;
private void FrmCPanel_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.NumPad1)
{
sbText1 += "1";
testRepeat.Text = sbText1;
//testRepeat.Text = string.Empty;
//testRepeat.AppendText(sbText1);
}
else if (e.KeyCode == Keys.NumPad5)
{
sbText1 += "5";
testRepeat.Text = sbText1;
//testRepeat.Text = string.Empty;
//testRepeat.AppendText(sbText1);
}
//if (e.KeyCode == Keys.NumPad1)
//{
// sbText.Append("1");
// //testRepeat.Text = sbText.ToString();
// testRepeat.Text = string.Empty;
// testRepeat.AppendText(sbText.ToString());
//}
//else if (e.KeyCode == Keys.NumPad5)
//{
// sbText.Append("5");
// //testRepeat.Text = sbText.ToString();
// testRepeat.Text = string.Empty;
// testRepeat.AppendText(sbText.ToString());
//}
}现象就是,每当输入一个数字的时候,此文本框会在前后同时添加此数字两次,请大神们亲测后,咱们再来交流,谢谢大家!
答案
-
这一句,事件注册到了窗体中,我认为是不合适的。
private void FrmCPanel_KeyDown(object sender, KeyEventArgs e)
应该是注册到TextBox。
testRepeat.KeyDown+= FrmCPanel_KeyDown;
不改事件注册代码,通过Handled也可以控制,参考例子
https://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.handled(v=vs.110).aspx
专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 已标记为答案 TheYangtzeTheYellowRiver 2017年12月26日 3:24
-
全部回复
-
这一句,事件注册到了窗体中,我认为是不合适的。
private void FrmCPanel_KeyDown(object sender, KeyEventArgs e)
应该是注册到TextBox。
testRepeat.KeyDown+= FrmCPanel_KeyDown;
不改事件注册代码,通过Handled也可以控制,参考例子
https://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.handled(v=vs.110).aspx
专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 已标记为答案 TheYangtzeTheYellowRiver 2017年12月26日 3:24
-