我这是一个简单的.net2005下的window应用程序,我在一个按钮的事件上打开一个模式对话框,该对话框上有一个输入框和一个确定按钮(btn_OK, DialogResult属性为OK)。原来的情况是:我在输入框中输入值后,再点击确定按钮,该对话框会自动关闭,且该模式对话框的返回值(DialogResult)是OK.现在我在这个输入框的KeyPress中加了点判断,当按下的键的是回车键时,直接调用确定按钮的点击事件btn_OK_Click,传的参数用的是(sender,e),但是执行时该对话框没有自动关闭,但是通过调试,我知道它确实执行了确定按钮的点击事件。
后来我一想是不是KeyPress中的sender与btn_OK_Click中的sender不一样呢,于是我在KeyPress事件的调用代码中使用了btn_OK_Click(btn_OK, e),发现执行结果还是一样,也就是说对话框没有自动关闭。
想请教下,到底是怎么回事,我不太明白呀。

解决方案 »

  1.   

    设置窗体的AcceptButton=确定按钮就行了
      

  2.   

    在原来在keypress里面的代码放到form1_Closing事件里面
      

  3.   

                if (e.KeyData == Keys.Enter)
                {
                    button1_Click(this, e);
                }试了一下。没问题。keypress键设置错了。
    keyup比较好一些。
      

  4.   

    to herojams: 你似乎没有看懂我的问题。1.将窗体的AcceptButton=确定按钮,非常不好。我要的是在输入框中输入数据时,当输入的是回车键时,立即去执行确定按钮的点击事件。你说的这种方法,虽然能达到我说的效果,但是当我并未输入数据时,不小心按了回车键,窗体也关闭了,会让许多人觉得莫名其妙的!2.在原来在keypress里面的代码放到form1_Closing事件里面:在keyPress事件里,我可能取得当前按下的键是不是回车键,但是如果将我的代码放在form1_Closing事件里,我怎么能判断当前按下的键是不是回车键呢,因为参数类型不一样了。
      

  5.   

    直接调用有什么用,就和调用一个方法一样不会触发后继动作,
    调用
    btn_OK.PerformClick();
      

  6.   

    to zanfeng:你的方法我也试过了,但是效果还是一样。我现在的问题不是btn_OK_Click没有执行,而是通过在KeyPress中调用btn_OK_Click和直接点击确定按钮来执行btn_OK_Click的效果不一样(窗口没有自动关闭和窗口会自动关闭),我想问题可能就出在这个确定按钮的DialogResult属性上。还望高人指教,如果.NET也是开源的就好了,呵呵
      

  7.   

    调用btn_OK.PerformClick();就会关闭的
      

  8.   

    5楼高人呀,我的问题因你而解决,太感谢了。能讲讲PerformClick和直接Click的区别吗?
      

  9.   

    直接调用btn_OK_Click等于调用一个有2个参数的方法一样,而调用PerformClick我估计内部是发左键点击消息WM_LBUTTONDOWN给按钮,模拟点击
      

  10.   

    to wartim: 根据你的意思,就是调用PerformClick时,模拟了鼠标的左键点击事件,因此效果与点击按钮完全一样,谢谢!