'窗体中 Option Explicit Dim SystemName As String Dim UserName As String Dim HDbc As String Dim TableName As String Dim FieldName As String Dim bFlag As Boolean Dim MediaFlag As Boolean Dim OrderBM As String Public Event AfterSelect(OrderBM As String, MediaFlag As Boolean)Private Sub CM_Cancel_Click() RaiseEvent AfterSelect(OrderBM, MediaFlag) Unload MeEnd SubPrivate Sub CM_OK_Click() Dim i As Integer For i = 1 To ListView1.ListItems.Count If ListView1.ListItems(i).Checked = True Then OrderBM = OrderBM & ListView1.ListItems(i).Text & "," End If
NextIf Len(OrderBM) > 0 Then OrderBM = Left(OrderBM, Len(OrderBM) - 1) End IfRaiseEvent AfterSelect(OrderBM, MediaFlag) Unload MeEnd SubPrivate Sub Form_Resize() If bFlag = False Then Frame1.Width = Me.Width Frame2.Visible = False End IfEnd SubPrivate Sub Option1_Click() MediaFlag = Option1.ValueEnd SubPrivate Sub Option2_Click() MediaFlag = Not Option2.Value
End Sub Public Sub init(vSystemName As String, vUserName As String, vHDbc As Long, vTableName As String, vFieldName As String, sFlag As Boolean) SystemName = vSystemName UserName = vUserName TableName = vTableName FieldName = vFieldName bFlag = sFlag HDbc = vHDbc
OrderBM = "" InitList End Sub '根据条件显示所有的单据号 Private Sub InitList() Dim StrSQL As String Dim icount As Long Dim rhstmt As Long Dim strValue As String * 100 Dim TempList As ListItem ListView1.ListItems.Clear StrSQL = "select Distinct " & FieldName & " from OA_Data.sysdba." & TableName & " where MA01='已审核'" If bFlag = True Then StrSQL = StrSQL & " and MA02='未送审'" Else StrSQL = StrSQL & " and (MA02='未送审' or ma02='审批同意') and MA03='未提交'" End If rhstmt = sysBufferTablePrepareGetData(HDbc, StrSQL) If rhstmt > 0 Then icount = sysBufferTableGetRecord(rhstmt) Do While icount > 0 strValue = String(100, Chr(0)) sysBufferTableGetData rhstmt, 1, strValue icount = sysBufferTableGetRecord(rhstmt) Set TempList = ListView1.ListItems.Add(Text:=Trim(vbStr(strValue))) TempList.Tag = "0" TempList.icon = 17 Loop End If
End Sub'类中 Option Explicit Dim SystemName As String Dim UserName As String Dim HDbc As Long Dim TableName As String Dim FieldName As String Dim bFlag As Boolean Dim isChild As Boolean Public Event AfterSelect(OrderBM As String, sFlag As Boolean)Dim WithEvents frmsl As frm_DJselectPrivate Sub Class_Initialize()Set frmsl = New frm_DJselectEnd Sub Public Sub init(vSystemName As String, vUserName As String, ByVal vHDbc As Long, vTableName As String, vFieldName As String, sFlag As Boolean) SystemName = vSystemName UserName = vUserName TableName = vTableName FieldName = vFieldName bFlag = sFlag HDbc = vHDbc frmsl.init SystemName, UserName, HDbc, TableName, FieldName, sFlag
End SubPublic Sub show() ' isChild = True ' If Not isChild Then ' SetParent frmsl.hWnd, vParenthwnd ' SetWindowLong frmsl.hWnd, -16, WS_CHILD Or WS_CLIPCHILDREN Or WS_CLIPSIBLINGS Or WS_TABSTOP ' frmsl.Top = 0 ' frmsl.Left = 0 ' Dim rt As RECT ' GetClientRect vParenthwnd, rt ' ParentResize rt.Right * 15, rt.Bottom * 15 ' ShowWindow frmsl.hWnd, SW_SHOW ' isChild = True ' SetFocus vParenthwnd ' Else ' frm_SL.Caption = m_name frmsl.show vbModal isChild = False ' End IfEnd Sub Public Sub ParentResize(vwidth As Long, vheight As Long) frmsl.Top = 0 frmsl.Left = 0 frmsl.Width = vwidth frmsl.Height = vheight End SubPrivate Sub Class_Terminate() Unload frmsl If Not frmsl Is Nothing Then Set frmsl = Nothing End IfEnd SubPrivate Sub frmsl_AfterSelect(OrderBM As String, MediaFlag As Boolean) RaiseEvent AfterSelect(OrderBM, MediaFlag)
End Sub'应用程序调用 Dim WithEvents SBselect As ERP_ConfigSelect'在事件中初始化 Set SBselect = New ERP_ConfigSelect SBselect.init SystemName, Username, hdbc, "MrPlan", "OR02", True SBselect.Show'调用事件 这个事件在组件编译后,用源代码调试程序不响应 Private Sub SBselect_AfterSelect(OrderBM As String, sFlag As Boolean) MsgBox "fff" End Sub '上面说的是这个组件中很简单的一个类,一个选择单据号的窗体,这个组件中的其他类的事件也是同样的情况
Option Explicit
Dim SystemName As String
Dim UserName As String
Dim HDbc As String
Dim TableName As String
Dim FieldName As String
Dim bFlag As Boolean
Dim MediaFlag As Boolean
Dim OrderBM As String
Public Event AfterSelect(OrderBM As String, MediaFlag As Boolean)Private Sub CM_Cancel_Click()
RaiseEvent AfterSelect(OrderBM, MediaFlag)
Unload MeEnd SubPrivate Sub CM_OK_Click()
Dim i As Integer
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Checked = True Then
OrderBM = OrderBM & ListView1.ListItems(i).Text & ","
End If
NextIf Len(OrderBM) > 0 Then
OrderBM = Left(OrderBM, Len(OrderBM) - 1)
End IfRaiseEvent AfterSelect(OrderBM, MediaFlag)
Unload MeEnd SubPrivate Sub Form_Resize()
If bFlag = False Then
Frame1.Width = Me.Width
Frame2.Visible = False
End IfEnd SubPrivate Sub Option1_Click()
MediaFlag = Option1.ValueEnd SubPrivate Sub Option2_Click()
MediaFlag = Not Option2.Value
End Sub
Public Sub init(vSystemName As String, vUserName As String, vHDbc As Long, vTableName As String, vFieldName As String, sFlag As Boolean)
SystemName = vSystemName
UserName = vUserName
TableName = vTableName
FieldName = vFieldName
bFlag = sFlag
HDbc = vHDbc
OrderBM = ""
InitList
End Sub
'根据条件显示所有的单据号
Private Sub InitList()
Dim StrSQL As String
Dim icount As Long
Dim rhstmt As Long
Dim strValue As String * 100
Dim TempList As ListItem
ListView1.ListItems.Clear
StrSQL = "select Distinct " & FieldName & " from OA_Data.sysdba." & TableName & " where MA01='已审核'"
If bFlag = True Then
StrSQL = StrSQL & " and MA02='未送审'"
Else
StrSQL = StrSQL & " and (MA02='未送审' or ma02='审批同意') and MA03='未提交'"
End If
rhstmt = sysBufferTablePrepareGetData(HDbc, StrSQL)
If rhstmt > 0 Then
icount = sysBufferTableGetRecord(rhstmt)
Do While icount > 0
strValue = String(100, Chr(0))
sysBufferTableGetData rhstmt, 1, strValue
icount = sysBufferTableGetRecord(rhstmt)
Set TempList = ListView1.ListItems.Add(Text:=Trim(vbStr(strValue)))
TempList.Tag = "0"
TempList.icon = 17
Loop
End If
End Sub'类中
Option Explicit
Dim SystemName As String
Dim UserName As String
Dim HDbc As Long
Dim TableName As String
Dim FieldName As String
Dim bFlag As Boolean
Dim isChild As Boolean
Public Event AfterSelect(OrderBM As String, sFlag As Boolean)Dim WithEvents frmsl As frm_DJselectPrivate Sub Class_Initialize()Set frmsl = New frm_DJselectEnd Sub
Public Sub init(vSystemName As String, vUserName As String, ByVal vHDbc As Long, vTableName As String, vFieldName As String, sFlag As Boolean)
SystemName = vSystemName
UserName = vUserName
TableName = vTableName
FieldName = vFieldName
bFlag = sFlag
HDbc = vHDbc
frmsl.init SystemName, UserName, HDbc, TableName, FieldName, sFlag
End SubPublic Sub show()
' isChild = True
' If Not isChild Then
' SetParent frmsl.hWnd, vParenthwnd
' SetWindowLong frmsl.hWnd, -16, WS_CHILD Or WS_CLIPCHILDREN Or WS_CLIPSIBLINGS Or WS_TABSTOP
' frmsl.Top = 0
' frmsl.Left = 0
' Dim rt As RECT
' GetClientRect vParenthwnd, rt
' ParentResize rt.Right * 15, rt.Bottom * 15
' ShowWindow frmsl.hWnd, SW_SHOW
' isChild = True
' SetFocus vParenthwnd
' Else
' frm_SL.Caption = m_name
frmsl.show vbModal
isChild = False
' End IfEnd Sub
Public Sub ParentResize(vwidth As Long, vheight As Long)
frmsl.Top = 0
frmsl.Left = 0
frmsl.Width = vwidth
frmsl.Height = vheight
End SubPrivate Sub Class_Terminate()
Unload frmsl
If Not frmsl Is Nothing Then
Set frmsl = Nothing
End IfEnd SubPrivate Sub frmsl_AfterSelect(OrderBM As String, MediaFlag As Boolean)
RaiseEvent AfterSelect(OrderBM, MediaFlag)
End Sub'应用程序调用
Dim WithEvents SBselect As ERP_ConfigSelect'在事件中初始化
Set SBselect = New ERP_ConfigSelect
SBselect.init SystemName, Username, hdbc, "MrPlan", "OR02", True
SBselect.Show'调用事件 这个事件在组件编译后,用源代码调试程序不响应
Private Sub SBselect_AfterSelect(OrderBM As String, sFlag As Boolean)
MsgBox "fff"
End Sub
'上面说的是这个组件中很简单的一个类,一个选择单据号的窗体,这个组件中的其他类的事件也是同样的情况