VB中實現同一窗口的多個實例及控件的動態增減
發表于:2007-07-14來源:作者:點擊數:
標簽:
作者:四川省綿陽市愛迪公司 李萬昌 ---- 在我編制的一個控制系統中,需要對不同模塊的不同狀態設置相應參數.由于設置的參數名稱都一樣,只是具體內容不同,我不再象往常一樣創建不同的窗口,擺放相同的部件,編制幾乎相同的代碼,而使用了窗體實例.其實現過程大致
作者:四川省綿陽市愛迪公司 李萬昌
---- 在我編制的一個控制系統中,需要對不同模塊的不同狀態設置相應參數.由于設置的參數名稱都一樣,只是具體內容不同,我不再象往常一樣創建不同的窗口,擺放相同的部件,編制幾乎相同的代碼,而使用了窗體實例.其實現過程大致如下:
新建一個Form(我使用的是MDIForm,用一般的form也一樣,我試過),取名為form1,再建一個窗口取名為form2;
為form1建立菜單項(使用按鈕也行):
菜單項:OpenWindow,
子菜單項:open1、open2、open3,子菜單項設為控件數組,名稱取為mnuOpen,索引分別為0、1、2;
為菜單mnuOpen編寫代碼:
Private Sub mnuOpen_Click(Index As Integer)
Dim myForm As Form '定義變量
For Each myForm In Forms '使用Forms集合
If myForm.Caption = "Window" & CStr(Index + 1) Then
'通過查看窗口標題檢查該窗口實例是否已打開
myform.
windowstate=0 '照原來的尺寸大小和位置打開
myForm.SetFocus '如果已打開,則使其獲得焦點
Set myForm = Nothing '釋放資源
Exit Sub '跳出過程
End If
Next
Set myForm = New Form2 '創建Form2的窗體實例
Load myForm
myForm.Caption = "Window" & CStr(Index + 1)
'設置其Caption屬性,也可作其他操作
myForm.Show
Set myForm = Nothing
End Sub
---- 在我的控制系統中,也用到了控件的動態增減,下面談談實現方法.
---- 假設根據一TextBox(名稱為Text1)的內容來決定某Label[名稱為Label1(0),定為控件數組,索引值Index為0]控件的數目.在Form中放置一個TextBox控件和一個Label控件,取名如前所述;再放置一個命令按鈕Command1.在Command1中編程:
Private Sub Command1_Click()
If IsNumeric(Text1.Text) = False Then Exit Sub
'如果Text1中內容不是數字則退出過程
Dim iCount As Integer, i As Integer
'iCount為設定的個數,i為計數器
Dim iIndex As Integer
'iIndex為實際個數
iCount = CInt(Text1.Text)
If iCount > 0 And iCount < 10 Then
'假定最多只能放10個Label1
iIndex = Label1.Count '當前Label1的個數
If iCount > iIndex Then
'設定值大于實際值則增加相應數目的控件
For i = iIndex To iCount - 1
Load Label1(i)
With Label1(i)
.Left = Label1(0).Left
.Top = Label1(i - 1).Top + 350
.Visible = True
End With
Next i
ElseIf iCount < iIndex Then
'設定值小于實際值則刪除多余的控件
For i = iCount To iIndex - 1
Unload Label1(i)
Next i
End If
End If
End Sub
---- 上面的代碼在
VB5.0和VB6.0中運行通過.
原文轉自:http://www.anti-gravitydesign.com