VB中在一个Form事件中显示另一个Form并且使Form窗口停留的问题。

馮強 2003-04-26 03:05:30
用Form1和Form2,在Form1中按下一个键,调用Module中的一个函数,函数将显示窗体Form2,并且根据用户输入返回值,然后在Form1的Click事件中继续处理。现在,我的问题是无法使form2停留。

用下面的语句可以工作,但不太好用:

Public Sub logonr3(logname As String, password As String, logflag As Boolean)


Form2.r3password.Text = "" ' 每次进入清除上次密码

Form2.Show '激活R/3登录窗口

Do While True

DoEvents

Loop

End Sub

请教大家该如何写?
...全文
397 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
馮強 2003-04-27
  • 打赏
  • 举报
回复
虽然已比结贴,但是LazyCat818的解决方案很合理,没法给分给你。下次吧。
lazycat818 2003-04-26
  • 打赏
  • 举报
回复
抱歉,写的匆忙,有错误

在form2中加入 Public mReturn as integer,然后在确定按钮的Click过程中加入
mReturn=1 me.hide 在取消按钮中加入mReturn=0 me.hide
将logonr3改成:
Public Sub logonr3(logname As String, password As String, logflag As Boolean)

Form2.r3password.Text = "" ' 每次进入清除上次密码

Form2.Show vbModal
if form2.mReturn=1 then
password=Form2.r3password.Text
‘获取form2中的信息
logflag=true
else
logflag=false
end if

unload form2

End Sub

最好在form2中再加一个布尔变量public bCanUnload as boolean,标志是否是按了按钮,然后在unload事件中作点处理:
if not bCanUnload then
cancel=1
me.hide
end if
再在unload form2前加上form2.bCanUnload=true
(不作这些处理,如果是用右上角的关闭按钮取消,会多激发form2的Load事件一次)

还有一个简单的办法,但是用到了全局变量
加一个全局变量Public mReturn as integer(定义在模块中)

在form2的确定按钮的Click过程中加入mReturn=1 me.hide
在取消按钮中加入mReturn=0 me.hide

将logonr3改成:
Public Sub logonr3(logname As String, password As String, logflag As Boolean)
dim dlg as form2
set dlg=new form2
on error resume next
mReturn=0
dlg.Show vbModal
if mReturn=1 then
password=dlg.r3password.Text
‘获取form2中的信息
logflag=true
else
logflag=false
end if

unload dlg
set dlg=nothing

End Sub
lazycat818 2003-04-26
  • 打赏
  • 举报
回复
我早就想写一点东西,探讨VB对话框的编程了,现在先说一点。
就你的问题,楼上说的Form2.Show vbModal是正确的,但肯定不完整。建议:
在form2中加入 Public mReturn as integer,然后在确定按钮的Click过程中加入
mReturn=1 me.hide 在取消按钮中加入mReturn=0 me.hide
将logonr3改成:
Public Sub logonr3(logname As String, password As String, logflag As Boolean)

Form2.r3password.Text = "" ' 每次进入清除上次密码

Form2.Show vbModal
if form2.mReturn=1 then
password=Form2.r3password.Text
‘获取form2中的信息
logflag=true
else
logflag=false
end if

unload form2

End Sub

最好在form2中再加一个布尔变量public bCanUnload as boolean,标志是否是按了按钮,然后在unload事件中作点处理:
if not bCanUnload then cancel=1
再在unload form2前加上form2.bCanUnload=true
(不作这些处理,会多激发form2的Load事件一次)

还有一个简单的办法,但是用到了全局变量
加一个全局变量Public mReturn as integer(定义在模块中)

在form2的确定按钮的Click过程中加入mReturn=1 me.hide
在取消按钮中加入mReturn=0 me.hide

将logonr3改成:
Public Sub logonr3(logname As String, password As String, logflag As Boolean)
dim dlg as form2
set dlg=new form2
on error resume next
dlg.Show vbModal
if mReturn=1 then
password=dlg.r3password.Text
‘获取form2中的信息
logflag=true
else
logflag=false
end if

unload dlg
set dlg=nothing

End Sub
馮強 2003-04-26
  • 打赏
  • 举报
回复
试过了,可行。多谢。
szqlovesly 2003-04-26
  • 打赏
  • 举报
回复
Public Sub logonr3(logname As String, password As String, logflag As Boolean)


Form2.r3password.Text = "" ' 每次进入清除上次密码

Form2.Show vbModal
End Sub

窗体的Show方法是有参数的,vbModal表示该窗体是模式运行,即执行过程中其他窗体失效

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧