laola1000 laola1000
关注数: 29 粉丝数: 34 发帖数: 2,427 关注贴吧数: 30
[求助]请教类模块集合的操作语法 我想写一个其功能类似于数组的Timer控件的类,定时执行任务;我这里摘抄了部分代码 请教怎么写才能实现类似于ListView那样的集合类。 子集里面给出地址就变成成员,不给地址就是方法这样的语句: 如: ListView1.ListItems.Add().... 子集不赋值给出Add /Clear/Remove等方法 ListView1.ListItems(1).Text = " " 子集赋值后可以更新属性。 我目前的代码 '窗体:frmMain-------------------- Option Explicit Private WithEvents Tsk As clsTask Private Sub cmdClose_Click() Tsk.TaskItem.Remove (1) End Sub Private Sub cmdStar_Click() Tsk.TaskItem.Add 1, 1, , True End Sub Private Sub Tsk_RunTime(TaskId As Integer) Select Case TaskId Case 1 Me.Caption = Now End Select End Sub Private Sub frmMain_Activate() Set Tsk = New clsTask Tsk.Enabled = True End Sub Private Sub frmMain_QueryClose(Cancel As Integer, CloseMode As Integer) Tsk.Enabled = False Set Tsk = Nothing End Sub '---------------------- '模块:mdlTask-------------------- Option Explicit Public Tasks(2000, 4) '支持同时运行2000个任务 Public Type TaskProperty TaskId As Integer RunTimer As Single TaskName As String Repetitive As Boolean End Type '---------------------- '类模块:clsTask-------------------- Option Explicit Private iEnabled As Boolean Private iTimeValue As Single Private Items As clsTaskItem Public Event RunTime(ByRef TaskId As Integer) '对应任务计时器到达后时间返回任务ID Private Sub Enableds() Dim i As Integer, m As Integer While iEnabled iTimeValue = Timer For i = 0 To 2000 If Tasks(i, 0) And iTimeValue - Tasks(i, 1) >= Tasks(i, 2) Then If Tasks(i, 3) Then Tasks(i, 0) = True Tasks(i, 1) = Timer Tasks(i, 3) = True Else Tasks(i, 0) = False Tasks(i, 3) = False End If RaiseEvent RunTime(i) End If DoEvents Next i DoEvents Wend End Sub Public Property Get Enabled() As Boolean Enabled = iEnabled End Property Public Property Let Enabled(vEnabled As Boolean) iEnabled = vEnabled If iEnabled Then Enableds End Property Public Property Get TimeValue() As Single TimeValue = iTimeValue End Property Public Property Get TaskItem() As clsTaskItem Set Items = New clsTaskItem Set TaskItem = Items End Property Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() iEnabled = False End Sub '---------------------- '类模块:clsTaskItem-------------------- Option Explicit Public Sub Add(ByVal TaskId As Integer, ByVal RunTimer As Single, Optional ByVal TaskName As String = "", Optional ByVal Repetitive As Boolean = False) Dim i As Integer, m As Integer If Tasks(TaskId, 0) And Tasks(TaskId, 3) = False Then MsgBox "指定的任务ID已存在,请重新指定!", 16, "错误" Exit Sub End If Tasks(TaskId, 0) = True Tasks(TaskId, 1) = Timer Tasks(TaskId, 2) = RunTimer Tasks(TaskId, 3) = Repetitive Tasks(TaskId, 4) = TaskName End Sub Public Sub Remove(ByVal TaskId As Integer) If Tasks(TaskId, 0) = False Then Exit Sub End If Tasks(TaskId, 0) = False End Sub Public Property Get Count() As Integer Dim i As Integer, m As Integer For i = 0 To 2000 If Tasks(i, 0) Then m = m + 1 Next i Count = m End Property Public Property Get Items(ByVal TaskId As Integer) As TaskProperty With Items .Repetitive = Tasks(TaskId, 3) .RunTimer = Tasks(TaskId, 2) .TaskId = TaskId .TaskName = Tasks(TaskId, 4) End With End Property '----------------------
[求助]请教类模块集合的操作语法 我想写一个其功能类似于数组的Timer控件的类,定时执行任务;我这里摘抄了部分代码 请教怎么写才能实现类似于ListView那样的集合类。 子集里面给出地址就变成成员,不给地址就是方法这样的语句: 如: ListView1.ListItems.Add().... 子集不赋值给出Add /Clear/Remove等方法 ListView1.ListItems(1).Text = " " 子集赋值后可以更新属性。 我目前的代码 '窗体:frmMain-------------------- Option Explicit Private WithEvents Tsk As clsTask Private Sub cmdClose_Click() Tsk.TaskItem.Remove (1) End Sub Private Sub cmdStar_Click() Tsk.TaskItem.Add 1, 1, , True End Sub Private Sub Tsk_RunTime(TaskId As Integer) Select Case TaskId Case 1 Me.Caption = Now End Select End Sub Private Sub frmMain_Activate() Set Tsk = New clsTask Tsk.Enabled = True End Sub Private Sub frmMain_QueryClose(Cancel As Integer, CloseMode As Integer) Tsk.Enabled = False Set Tsk = Nothing End Sub '---------------------- '模块:mdlTask-------------------- Option Explicit Public Tasks(2000, 4) '支持同时运行2000个任务 Public Type TaskProperty TaskId As Integer RunTimer As Single TaskName As String Repetitive As Boolean End Type '---------------------- '类模块:clsTask-------------------- Option Explicit Private iEnabled As Boolean Private iTimeValue As Single Private Items As clsTaskItem Public Event RunTime(ByRef TaskId As Integer) '对应任务计时器到达后时间返回任务ID Private Sub Enableds() Dim i As Integer, m As Integer While iEnabled iTimeValue = Timer For i = 0 To 2000 If Tasks(i, 0) And iTimeValue - Tasks(i, 1) >= Tasks(i, 2) Then If Tasks(i, 3) Then Tasks(i, 0) = True Tasks(i, 1) = Timer Tasks(i, 3) = True Else Tasks(i, 0) = False Tasks(i, 3) = False End If RaiseEvent RunTime(i) End If DoEvents Next i DoEvents Wend End Sub Public Property Get Enabled() As Boolean Enabled = iEnabled End Property Public Property Let Enabled(vEnabled As Boolean) iEnabled = vEnabled If iEnabled Then Enableds End Property Public Property Get TimeValue() As Single TimeValue = iTimeValue End Property Public Property Get TaskItem() As clsTaskItem Set Items = New clsTaskItem Set TaskItem = Items End Property Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() iEnabled = False End Sub '---------------------- '类模块:clsTaskItem-------------------- Option Explicit Public Sub Add(ByVal TaskId As Integer, ByVal RunTimer As Single, Optional ByVal TaskName As String = "", Optional ByVal Repetitive As Boolean = False) Dim i As Integer, m As Integer If Tasks(TaskId, 0) And Tasks(TaskId, 3) = False Then MsgBox "指定的任务ID已存在,请重新指定!", 16, "错误" Exit Sub End If Tasks(TaskId, 0) = True Tasks(TaskId, 1) = Timer Tasks(TaskId, 2) = RunTimer Tasks(TaskId, 3) = Repetitive Tasks(TaskId, 4) = TaskName End Sub Public Sub Remove(ByVal TaskId As Integer) If Tasks(TaskId, 0) = False Then Exit Sub End If Tasks(TaskId, 0) = False End Sub Public Property Get Count() As Integer Dim i As Integer, m As Integer For i = 0 To 2000 If Tasks(i, 0) Then m = m + 1 Next i Count = m End Property Public Property Get Items(ByVal TaskId As Integer) As TaskProperty With Items .Repetitive = Tasks(TaskId, 3) .RunTimer = Tasks(TaskId, 2) .TaskId = TaskId .TaskName = Tasks(TaskId, 4) End With End Property '----------------------
1 下一页