如下代码,是什么原因引起的,窗体名称相同怎么不会引起冲突,系统根据什么区分窗体实例?
看上去有点奇怪,在不同的窗体连续点击Command2,居然消息都堆积到一个窗体来处理。
Option ExplicitPublic i As Integer '在标准模块中定义不会有这种现象Public Sub SetCaption(WithForm1 As Boolean)
Set Form1 = Nothing 'SetNothing后窗体可用,
Form1.Show '全局变量 i 在新窗体与旧窗体间不是全局的Cls
Dim j As Integer
For j = 0 To Forms.Count - 1
Form1.Print "Forms.Item(" & j & ").Name = "; Forms.Item(j).Name '名称都是相同的,但句柄不同
NextIf WithForm1 Then
Do While i < 500
Form1.Caption = i
i = i + 1
DoEvents
Loop
Else
Do While i < 500
Caption = i
i = i + 1
DoEvents
Loop
End If
End SubPrivate Sub Command1_Click()
SetCaption False 'Caption前不加Form1.
End SubPrivate Sub Command2_Click()
SetCaption True 'Caption前加Form1.
End SubPrivate Sub Form_Load()
Me.AutoRedraw = True
End Sub
看上去有点奇怪,在不同的窗体连续点击Command2,居然消息都堆积到一个窗体来处理。
Option ExplicitPublic i As Integer '在标准模块中定义不会有这种现象Public Sub SetCaption(WithForm1 As Boolean)
Set Form1 = Nothing 'SetNothing后窗体可用,
Form1.Show '全局变量 i 在新窗体与旧窗体间不是全局的Cls
Dim j As Integer
For j = 0 To Forms.Count - 1
Form1.Print "Forms.Item(" & j & ").Name = "; Forms.Item(j).Name '名称都是相同的,但句柄不同
NextIf WithForm1 Then
Do While i < 500
Form1.Caption = i
i = i + 1
DoEvents
Loop
Else
Do While i < 500
Caption = i
i = i + 1
DoEvents
Loop
End If
End SubPrivate Sub Command1_Click()
SetCaption False 'Caption前不加Form1.
End SubPrivate Sub Command2_Click()
SetCaption True 'Caption前加Form1.
End SubPrivate Sub Form_Load()
Me.AutoRedraw = True
End Sub
解决方案 »
- vb日积月累提示
- 请大家帮忙看看~~~~~~~~~~~~~
- 运行时错误,死活搞不定
- Vb中怎么实现这个功能??
- 招VB软件工程师
- 【问】如何用API得到ListView的ItemCheck事件呢?
- 在TreeView中,我如何可以实现按住"Ctrl"键,同时选中几个节点
- 如何将vb6的程序在XP中显示为xp的界面?不是用xp控件的方法,我记得是写一个独立的xml文件实现的。
- vb+ado方式远程访问/操纵Sybase数据库,我应该安装哪个驱动?另外打包的时候应该给客户安装什么库?
- 关于用 vb 写音乐播放器,调用的系统 API 函数 mcisendstring 不能播放有带空格的文件名的 MP3 的问题
- VB 请教窗体切换问题 如何让已经打开的窗体显示到前面
- 有个程序需要调试
Public Form1 As New Form1
所以
Set Form1 = Nothing '虽然释放了旧的实例'
Form1.Show '但是 AS New 的定义只要有引用,如果当前是 Nothing,就会自动新建一个实例'
也就是两个相同的名称,前者当作实例引用,后者用As关键词当作定义类的模板使用?
但是不建议这样用,毕竟相同的命名在读代码或讨论时容易混淆。
Form1 只是历史原因。