| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 754 人关注过本帖
标题:类模块的问题
取消只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:4 
类模块的问题
我编了支程式,其中有两个表单,一个类模块,类中有设定事件返回功能,但是为何返回的表单一定要在主表单才会有效?
不知道我是否漏掉什么关键,亦或是只能这样? 以前没注意过会有这状况.
搜索更多相关主题的帖子: 羊肉串 
2014-12-08 12:40
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
例如:
Form1(Main Form) :
---------------------------------------------------------------------------
Private WithEvents AAA As ClsABCD
...
...
Private Sub AAA_BackStruct(ByVal PNum As Integer, ByVal FNum As Integer)
    MsgBox "No !"
End Sub
---------------------------------------------------------------------------
Form2 :
---------------------------------------------------------------------------
Private WithEvents BBB As ClsABCD
...
...
Private Sub BBB_BackStruct(ByVal PNum As Integer, ByVal FNum As Integer)
    MsgBox "OK !"
End Sub
---------------------------------------------------------------------------
Class ClsABCD :
---------------------------------------------------------------------------
Public Event BackStruct(ByVal iPNum As Integer, ByVal iFNum As Integer)
...
...
...
...
RaiseEvent BackStruct(1, FlowNum)'但是每到这行就会跳到Main Form里的SUB中
...
...
---------------------------------------------------------------------------
不知道我是漏了什么?我两边都有类事件返回的需求.

不要選我當版主
2014-12-08 12:50
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
如果是同一个类,就同时在这个二个窗体上返回。

你能用同个类对分别对两个不同表单上对指定的控件透过类事件返回去做动作吗?
要怎做?

不要選我當版主
2014-12-09 00:16
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
Public Event BackStruct(ByVal iPNum As Integer, ByVal iFNum As Integer)
...
RaiseEvent BackStruct(1, FlowNum)'但是每到这行就会跳到Main Form里的SUB中
...

越想也越怪,单凭关键这两行,VB怎去判断事件应该要回应到哪个表单裡.
是哪边可以设定吗?不然就是预设都只回应主表单。
但是奇怪的是,在不同表单用不同对象去new一个类后,两个表单都自动会有相应的事件函式可供人使用。
或是关键在于起始表单先new一个类后,自然决定要返回的目标,所以难道你是在某一表单内定义:
Public WithEvents AAA As ClsABCD
但我印象中,类事件好像不能宣告成Public,而且还一定得写在表单裡。
好乱,用两个不同对象去对相同一个类,期望能在触发类事件时,让代码的执行权自动切换到不同表单运行,应该是不行。

不要選我當版主
2014-12-09 00:43
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
在Form2 :
1. 写成 set BBB = ClsABCE 光源码编译就过不了.
2. 写成 Set BBB = Form1.AAA 源码编译就过了.
--------------------------------------------------------------------
直接试了你的源码发现你设计的功能好像跟我要的刚好相反.
不过也差不多,也因此找到解决方向了.
--------------------------------------------------------------------

Form1:--------------------------------------------------------------
Public WithEvents AAA As ClsABCD
Private Sub AAA_Back()
    Form1.Hide
    Form2.Show
End Sub
Private Sub AAA_BackStruct(ByVal iCount As Integer)
    ProgressBar1.Value = iCount
End Sub
Private Sub Command1_Click()
    With AAA
        .nCount = 100
        .Run
    End With
End Sub
Private Sub Form_Load()
    Set AAA = New ClsABCD
    ProgressBar1.Value = 0
    Form2.Show
    Form2.Hide
End Sub
Form2:--------------------------------------------------------------
Private WithEvents BBB As ClsABCD
Private Sub BBB_BackStruct(ByVal iCount As Integer)
    ProgressBar1.Value = iCount
End Sub
Private Sub Form_Load()
    Set BBB = Form1.AAA
    ProgressBar1.Value = 0
End Sub
ClsABCD:--------------------------------------------------------------
Private mvarnCount As Integer
Public Event BackStruct(ByVal iCount As Integer)
Public Event Back()
Public Property Let nCount(ByVal vData As Integer)
    mvarnCount = vData
End Property
Public Sub Run()
Dim i As Integer, j As Integer
    For i = 0 To mvarnCount
        RaiseEvent BackStruct(i)
    Next i
    RaiseEvent Back
    For j = 0 To mvarnCount
        RaiseEvent BackStruct(j)
    Next j
End Sub

不要選我當版主
2014-12-09 14:32
快速回复:类模块的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017262 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved