奇怪的问题,调用另一函数与直接执行那一函数结果不一样

时间:2022-11-24 23:04:18
我这是一个简单的.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),发现执行结果还是一样,也就是说对话框没有自动关闭。


想请教下,到底是怎么回事,我不太明白呀。

11 个解决方案

#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时,模拟了鼠标的左键点击事件,因此效果与点击按钮完全一样,谢谢!

#11


学习了,虽说不作window方面程序

#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时,模拟了鼠标的左键点击事件,因此效果与点击按钮完全一样,谢谢!

#11


学习了,虽说不作window方面程序