您的位置:程序门 -> .net技术 -> vb.net



新手求教:vb.net中form关闭问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


新手求教:vb.net中form关闭问题
发表于:2007-01-08 16:50:45 楼主
請問:
     
          如果form上有1个textbox1,在textbox1的validating事件中有个msgbox.
          这时光标在textbox1中,如何能点form右上角的关闭按钮后,直接关闭画面,而不报出textbox1的validating事件中的message呢?

谢谢!  
发表于:2007-01-08 16:56:091楼 得分:0
试试在closing里面先把textbox.visible   =   false
发表于:2007-01-08 17:00:152楼 得分:0
楼上,我刚才试了不行握~~~
发表于:2007-01-08 17:02:523楼 得分:0
form关闭的过程会先经历form_closing()然后form_closed(),这样也不行啊?
发表于:2007-01-08 17:08:524楼 得分:0
to:xxelement(未知元素)  
不行啊,它连closing都没入就直接到validating了。
顺序:validating-》closing
发表于:2007-01-08 17:09:035楼 得分:0
关闭之前把causesvalidation属性设为false,就触发验证事件了。
发表于:2007-01-08 17:11:166楼 得分:0
少打了几个字
关闭之前把causesvalidation属性设为false,就不会触发validating事件了。
发表于:2007-01-08 17:15:127楼 得分:0
因为当用鼠标点右上角的关闭按钮时,先出触发的是validating事件,那必然要报出validating事件中的message.
然后才会走form_closing(),然后是form_closed().

所以请教大家,如何在textbox1     lostfoucs时,也就是说触发validating事件之前把form关闭掉.

不知道用        
protected   overrides   sub   wndproc(byref   m   as   system.windows.forms.message)

                mybase.wndproc(m)

                select   case   m.msg
                        case   &h201
                                msgbox( "mouse ")
                end   select

        end   sub
是否可以做到?m.msg又是哪个常量呢?
发表于:2007-01-08 17:15:458楼 得分:0
如果关闭验证,问题就转化了。我应该何时开和关验证呢?
发表于:2007-01-08 17:16:359楼 得分:0
textbox1   有个属性
textbox1_lostfocus()这个会在你的textbox1_validating()之前调用,可以在这个里面动手脚
发表于:2007-01-08 17:19:2610楼 得分:0
事件顺序由上至下:

enter焦点进入了控件
 
gotfocus   控件接收了焦点
 
leave输入焦点离开了控件
 
validating控件正在进行验证
 
validated   控件完成了验证
 
lostfocus控件失去焦点
发表于:2007-01-08 17:20:4111楼 得分:0
如果放在leave,我怎样才知道鼠标去按close按钮了?
发表于:2007-01-08 17:21:5112楼 得分:0
causesvalidation设置了不行的.
就是如果我下面有第二个   textbox2的话,在textbox1   lostfoucs时是要触发textbox1     的validating.
仅仅是点form右上角关闭按钮时不触发textbox1     的validating.
发表于:2007-01-08 17:29:5513楼 得分:0
如果要完美解决的话,需要处理消息并设置一个全局标志。
消息处理的方法在msdn中有的
发表于:2007-01-08 17:31:2414楼 得分:0
在form_load事件里添加textbox1.causesvalidation   =   false试试
发表于:2007-01-08 17:34:4615楼 得分:0
谢谢楼上各位的讨论.

zhouxiaotan(夜雨悠扬)和我的想法一样.但我现在就是找不到这个消息的常量是什么.

大家有什么好办法告诉我啊   .

这个问题很紧急.
发表于:2007-01-08 17:42:4116楼 得分:0
突然想了一个方法让大家参考一下,大家给d意见。
不过有个前提就是知道鼠标将要按close按钮。
如何知道呢?
通过close按钮的mousehover   事件(如果是窗体上的“x”按钮,则通过算出坐标范围)
如果触发mousehover   ,则将所有需要验证的控件的causesvalidation设为false。
发表于:2007-01-08 17:47:0717楼 得分:0
如果靠mousehover的话可能会出错,如果关闭的很快不在x上停留的话是不会触发这个事件的。
发表于:2007-01-08 17:51:1918楼 得分:0
我试了下,没问题握。
发表于:2007-01-08 18:21:4019楼 得分:0
那如果是用alt+f4呢?
这样没有鼠标的动作了。
还将会报出message.
最好的办法是代码里找出这个时候是要用到关闭.

请大家再想办法啊!
发表于:2007-01-08 20:38:4020楼 得分:0
其实不用验证也可以啊,把验证的过程写到save过程不就行了。
发表于:2007-01-09 09:15:1021楼 得分:0
不能那样做的.
业务上的要求.失去光标和存储的时候有各自的check.

其实在validating里加入     me.activecontrol.name   <>   "textbox1 "     的判断就可以完成效果.
但由于form上的第三方插件太多.担心引起其他的bug.
发表于:2007-01-09 09:29:4022楼 得分:0
看看msdn中:
addhandler
removehandler
发表于:2007-01-09 10:12:4223楼 得分:0
学一个


快速检索

最新资讯
热门点击