求助!如何子函数暂停以便等待某个事件触发以后继续运行?VB.net

时间:2022-07-28 18:31:51
一个VB.net程序大致结构如下:

Form1,Form2
------------------------------
class form1
 
private s1 as string = ""

private sub Button1_click(略)略
 if form2.showselect() then
  s1=form2.s2
 end if 
end sub

end class
------------------------------
class form2

public s2 as string=""

public function showselect() as boolean
 me.show
'我希望在这里能够使这个function暂停以便等待我点击buttonOK或者buttonCancle

if (点击了buttonOK) then '这里就不晓得怎么写了
  return true
else if (点击了buttonCancel) then
  return false
end if
  return false
end function

private sub bottonOK_click(略) 略

me.hide
' 点击以后才能让 funcion showselect()返回true

end sub

private sub bottonCancle_click(略)略
me.hide
'点击以后才能让 function showselect()返回false

end sub

end class

我构思到这个地方就写不下去了,因为我没有办法让form2.showselect在注释的地方停顿等待buttonOK或者是butonCancel的点击。

但是VB.net的showfiledialog.show确实可以实现点击了OK或者Cancel以后再返回值这样的功能,我想知道如何在我的form2中实现这样的功能?



十分感谢!

5 个解决方案

#1


不知道楼主出于什么理由一定要函数在执行过程中中等待,如果只是要实现一个等待对话框选择的话你可以使用一个模态窗体或者对话框就行了.
看你写的代码,如果硬要在showselect()过程中停止,等待用户点击按钮的话恐怕只能使用循环来不停判断用户是否按下按钮了.因为showselect函数将与form2运行在同一个线程中,如果采用什么暂停线程的办法来等待的话,整个form2就无法响应任何用户操作了.

#2


谢谢weinjanes的帮助,我解释一下:

事实上我在form2里头有一好几个combobox,我的showselect函数希望能在 me.show后面暂停,以便用户有机会选择combobox里头的值,并且点击确定或者取消按钮,反馈给showselect函数使它能够继续下去。
如果点击确定就可以给form2.s2=combobox1.text & combobox2.text &... &comboboxN.text.

这样 form1.s1 = form2.s2 才能执行啊。

我其实只是想执行像openfiledialog.show()一样的功能,我们在实际使用中也知道只有当openfiledialog显示以后,只有我们点击了确定或者取消,openfiledialog.show()才会有返回值传回来,我就是想做成一个这样的东西。

我开始使用了对话框 inputbox,但是根本不够用,inputbox不能往里头加combobox控件的阿。没有combobox控件我就只能往inputbox里头输入文本,一不小心输错就要重来,太麻烦了。

#3


class   form1 
  
private   s1   as   string   =   "" 

private   sub   Button1_click(略)略 
  if   form2.showsdialog() =dialoagresult.Ok  then 
    s1=form2.s2 
  end   if   
end   sub 

end   class 
------------------------------ 
class   form2 

public   s2   as   string="" 

private   sub   bottonOK_click(略)   略

me.close()
me.Dialogresult=dialogresult.OK 
end   sub 

private   sub   bottonCancle_click(略)略 
me.Close() 
end   sub 

end   class 

#4


那就用form_1.showdialog(form_0)
form_1是你要显示的窗体,form_0是你当前的窗体,这样能让form_1成为form_0的一个模态窗体,在form_1没退出之前,form_0将停止任何相应。
然后用这个方法判断form_1的返回

if form_1.showdialog(form0)=dialogresult.ok then
    '做你需要的事情,比如访问form_1.combobox_1.....
end if

这样应该可以的。楼主试试?

#5


太棒了,我终于明白怎么回事了。
谢谢两位!
分数不多,加给你们了,请笑纳。

#1


不知道楼主出于什么理由一定要函数在执行过程中中等待,如果只是要实现一个等待对话框选择的话你可以使用一个模态窗体或者对话框就行了.
看你写的代码,如果硬要在showselect()过程中停止,等待用户点击按钮的话恐怕只能使用循环来不停判断用户是否按下按钮了.因为showselect函数将与form2运行在同一个线程中,如果采用什么暂停线程的办法来等待的话,整个form2就无法响应任何用户操作了.

#2


谢谢weinjanes的帮助,我解释一下:

事实上我在form2里头有一好几个combobox,我的showselect函数希望能在 me.show后面暂停,以便用户有机会选择combobox里头的值,并且点击确定或者取消按钮,反馈给showselect函数使它能够继续下去。
如果点击确定就可以给form2.s2=combobox1.text & combobox2.text &... &comboboxN.text.

这样 form1.s1 = form2.s2 才能执行啊。

我其实只是想执行像openfiledialog.show()一样的功能,我们在实际使用中也知道只有当openfiledialog显示以后,只有我们点击了确定或者取消,openfiledialog.show()才会有返回值传回来,我就是想做成一个这样的东西。

我开始使用了对话框 inputbox,但是根本不够用,inputbox不能往里头加combobox控件的阿。没有combobox控件我就只能往inputbox里头输入文本,一不小心输错就要重来,太麻烦了。

#3


class   form1 
  
private   s1   as   string   =   "" 

private   sub   Button1_click(略)略 
  if   form2.showsdialog() =dialoagresult.Ok  then 
    s1=form2.s2 
  end   if   
end   sub 

end   class 
------------------------------ 
class   form2 

public   s2   as   string="" 

private   sub   bottonOK_click(略)   略

me.close()
me.Dialogresult=dialogresult.OK 
end   sub 

private   sub   bottonCancle_click(略)略 
me.Close() 
end   sub 

end   class 

#4


那就用form_1.showdialog(form_0)
form_1是你要显示的窗体,form_0是你当前的窗体,这样能让form_1成为form_0的一个模态窗体,在form_1没退出之前,form_0将停止任何相应。
然后用这个方法判断form_1的返回

if form_1.showdialog(form0)=dialogresult.ok then
    '做你需要的事情,比如访问form_1.combobox_1.....
end if

这样应该可以的。楼主试试?

#5


太棒了,我终于明白怎么回事了。
谢谢两位!
分数不多,加给你们了,请笑纳。