由于我在做工程时发现一个无法解释的问题,所以我用最简单的测试程序表现出来,首先我拖了两个文本框textBox1和textBox2将TabIndex分别设为3和4,我想达到的目的,就是当在焦点在textBox1时,Tab和回车时,焦点跑到textBox2上,对于回车跑到textBox2我写了如下代码:private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
                SendKeys.Send("{Tab}"); 
        }private void textBox2_Enter(object sender, EventArgs e)
        {
            string str = "";
        }
问题就这里,我在调试时将string str = ""处设了一个断点,当我回车时,程序就卡起了,非要按ctrl+shift+del,程序才跑到断点处,如果继续运行,再将焦点放到textBox1处再回车,程序不会在断点处中断,就像没有设断点一样运行下去,如果按Tab是正常的。影响了我代码的跟踪调试,我也是第一次遇到,大家有没有遇到这种情况,有没有解决的办法。大家不信也可以试试,谢谢大家

解决方案 »

  1.   

    帮你试了,我这不存在这个问题。那个SendKeys你从哪里知道的啊?还挺好用的
      

  2.   

    感觉你描述的和你代码执行是相符的,没有错,那个不是卡起咱们第二个事件
    private void textBox2_Enter(object sender, EventArgs e)
            {
                string str = "";
            }只有发生这个事件才会触发
    使用 SendKeys 将键击和组合键击发送到活动应用程序。此类无法实例化。若要发送一个键击给某个类并立即继续程序流,请使用 Send。
      

  3.   

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.Enter)
        {
            e.Handled = false;
            textBox2.Focus();
        }
    }
      

  4.   

    另外关于使用Sendkeys.Send,你在KeyDown中会触发系统处理的死循环(好在这个会被系统检测出来并且产生异常)。它不能写在KeyDown中,但是可以写在随后的事件中,例如:private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '\r')
        {
            e.Handled = false;
            SendKeys.Send("{TAB}");
        }
    }
      

  5.   


    我回车就会激活textBox2,这个事件就该触发三,并且程序就没反应了,直到我按ctrl+alt+del,程序才会运行到断点处,我觉得很奇怪
      

  6.   


    你这个也是一样的效果,不设断点正常,一设了断点,就没有反应了,直到按ctrl+alt+del,太奇怪了
      

  7.   


    嗯,高试的时候程序发生了异常,停止了,等待处理不调试的时候可能系统本身对这种情况下的死循环做了处理,所以感觉不到
    应该是上面说的,不应该放到down里应该放到press