一个简单问题
vb吧
全部回复
仅看楼主
level 8
tbzp666 楼主
为什么一个窗体可以调用另一个窗体中的控件对象,而不能调用另一个窗体的通用过程
原理是什么?
比如创建两个窗体 Form1和Form2
在Form1中创建命令按钮,在其单击事件中书写
(1)Call Form2.Command1_Click 或Call Form2.Command1 均为(错误)
(2)Form2.Command1.Value = True(正确)
在(2)中Command1是作为Form2的属性还是什么?
2023年01月04日 03点01分 1
level 13
Call Form2.Command1_Click 的话,首先要Form2中的Command1_Click事件的前缀Private改成Public或Friend
2023年01月04日 04点01分 2
level 8
tbzp666 楼主
好像就是Private作用域问题
2023年01月04日 07点01分 3
当然了,Private私有的当然只能在窗体内调用
2023年01月04日 07点01分
吧务
level 12
这里可以分开理解:
1. Form2 这个名字在 VB6 里通常指“默认窗体实例”,所以 Form2.Command1.Value 是在访问这个窗体实例上的控件成员。
2. Command1 是窗体类里的一个控件成员,VB6 会把它暴露成窗体对象的成员,所以看起来像 Form2 的属性。
3. Command1_Click 是事件过程,默认是 Private Sub,只给窗体内部事件机制调用;外部模块当然不能直接 Call。
4. 就算改成 Public,也不建议外部直接调用按钮事件。更好的写法是把真正要执行的逻辑放到一个 Public Sub,比如 Public Sub DoSomething(),按钮点击和外部调用都去调用这个过程。
也就是说:控件是对象成员,事件过程是私有过程;不要把“点按钮”当成业务接口。
2026年06月22日 16点06分 5
level 8
tbzp666 楼主
这是VB中访问权限与元素类型问题
Form2.command是窗体的公共属性,所以能直接访问
Form2.Command1_Click是窗体的私有过程,所以不能跨窗体调用。
如果想做,可以这样做
第一步:修改Form2事件的访问权限
Form2中代码
Public Sub Command1_Click() ‘把Private改为Public
Form1.Label1.Caption = "Form2中事件被Form1触发"
End Sub
第二步:在Form1中触发这个事件
Form1中代码
Private Sub Command1_Click()
Form2.Command1_Click
End Sub
2026年06月23日 05点06分 6
有ai真方便,否则以前有问题不知道找谁去问
2026年06月24日 03点06分
1