none
一个很简单有很坑的问题,大神一定要看看,不看会后悔 RRS feed

  • 问题

  • 代码如下:

    首先在窗体的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());
                //}
            }

    现象就是,每当输入一个数字的时候,此文本框会在前后同时添加此数字两次,请大神们亲测后,咱们再来交流,谢谢大家!

    2017年12月25日 9:23

答案

  • 这一句,事件注册到了窗体中,我认为是不合适的。

    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

    2017年12月26日 0:56
  • 其实是个小问题,我理解错了。
    2017年12月26日 3:25

全部回复

  • 这一句,事件注册到了窗体中,我认为是不合适的。

    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

    2017年12月26日 0:56
  • 其实是个小问题,我理解错了。
    2017年12月26日 3:25