//在TextBox控件中有一事件,代码如下
private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == Keys.Enter.ToString())
            {
                    MessageBox.Show("货号输入有误,请重新输入!", "错误提示!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
        }//代码并没有错误,就是有一奇怪的现象是当你按下Enter键时出发了上面的事件,可是你再按Enter键怎么都关不了提示窗口,请问这是为什么?焦点不是已经移到
//MessageBox上面了吗?为什么还触发textBox1_KeyUp事件呢?如何解决上述问题?

解决方案 »

  1.   

    在弹出对话框之前吧光标移到其他控件上,比如有textBox1,就可以把textBox1.Focus();加到MessageBox.Show前面,
    这样就不会出现类似问题了。
      

  2.   

    Enter键是在按下时触发默认按钮事件的,显示MessageBox时,按下Enter键会关闭MessageBox,等放开Enter键时,MessageBox已经不在了,焦点回到了TextBox上面,所以触发TextBox的KeyUp事件。
      

  3.   

    个人看法:
    当弹出对话框后,其实form还是在等待你对弹出对话框作出处理,当按下enter键后,
    form会接受到这一事件,那时焦点还是在此文本框里。 所以会出现连续的弹出。。
      

  4.   

    //没有其它的控件的时候怎么办?还有在提示窗口关闭之后我还要把TextBox设置为焦点.
    label1.Focus();//没有其它的控件的时候怎么办?
                        MessageBox.Show("货号输入有误,请重新输入!", "错误提示!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                        System.Threading.Thread.Sleep(100);//加上这句也无效
                        ((TextBox)sender).Focus();//设置为焦点后又弹出了上面的提示窗口.
    //有没有好的解决方案呀?
      

  5.   

    漏了个字:所以触发TextBox的KeyUp事件。
      

  6.   

    //问题解决了,谢谢了.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            int n = 0;
            public Form1()
            {
                InitializeComponent();
            }        private void textBox1_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyCode.ToString() == Keys.Enter.ToString())
                {
                    if (n == 1)
                    {
                        label1.Focus();
                        MessageBox.Show("货号输入有误,请重新输入!", "错误提示!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                        System.Threading.Thread.Sleep(100);
                        ((TextBox)sender).Focus();
                    }
                    n = 0;
                }
            }        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                  n = 1;
            }
        }
    }
      

  7.   

    换个事件就可以了吧?用KeyDown事件呢?
      

  8.   

    很多出现了多次调用同一事件的情况,如果想图简单都是用6楼的方法:加个公用布尔变量,第一次触发事件后设置为true,第二次如果该变量为true,则跳过代码,并将该变量重设为false
      

  9.   

    我不明白为什么楼主要这样比较e.KeyCode.ToString() == Keys.Enter.ToString())这样不是更方便吗?e.KeyCode == Keys.Enter 
      

  10.   

    楼主  可以用OnClick吧
    我有时候坐  GUI  也出现过这样的问题