2016-01-11 38 views
1

複選框,這是我的Form1上,它含有大量的複選框和一個按鈕,以顯示窗口2:VB,取消勾選所有的形式

Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Form2.show() 
    End Sub 
End Class 

這裏是我的窗口2,還含有大量的複選框和的按鈕,取消選中爲Form1上和窗口2的所有複選框:

Public Class Form2 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     'code for clearing all the checkboxes, I don't know how to do it 
    End Sub 
End Class 

我的問題是:我怎麼能做出取消選中在Form1,Form2的,甚至其他形式的所有複選框在Form2.Button1代碼?


我試過這個代碼,在它被放置在形式取消選中唯一的複選框:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    For Each cc As Control In Me.Controls 
     If TypeOf cc Is CheckBox Then 
      DirectCast(cc, CheckBox).Checked = False 
     End If 
    Next 
End Sub 

也許我能做到這一點通過修改這個代碼..我不知道
謝謝大家提前

+1

您將需要所有當前實例化的形式提供參考。所以你必須在應用程序的某個地方跟蹤全局。 – David

回答

1

最後我得到了一個解決方案:

For Each cc As Control In Me.Controls 
     If TypeOf cc Is CheckBox Then 
      DirectCast(cc, CheckBox).Checked = False 
     End If 
    Next 
    For Each cc As Control In Form1.Controls 
     If TypeOf cc Is CheckBox Then 
      DirectCast(cc, CheckBox).Checked = False 
     End If 
    Next 
1

您需要在中心位置保留一個打開表單的列表,當任何表單被創建時,它應該將自身添加到列表中,並且在處置時自行移除(您可以從共同基表單繼承所有表單這是否)

然後,您可以將所有表單都提供給類似的方法來遍歷它們並完成工作。

此外,請注意,您的代碼不會取消選中表單上的所有複選框,只需取消選中表格上的複選框直接。如果你可能在面板,組合框等上有chaboxbox,你需要改進代碼以遞歸檢查內部控件。

+0

@ alireza可能說,我已經爲你添加了一些遞歸代碼,幫助它可以幫助你處理你的問題,謝謝 –

+0

@Alireza uhmm ..但我不知道該怎麼做xD我是新來的編程vb .net –

+0

@merdolodafoca你應該告訴我們你想要什麼或者你遇到了什麼樣的問題,然後我們可以提供幫助,這樣你就必須告訴我們更多關於你的問題的細節 –

1

可能的@Alireza說你需要遞歸檢查內部控制,希望下面是你想要什麼,
謝謝,

對於每一個表,你只需要插入

Dim x As New Class1  
x.TempClass(Me) 

例如代碼

Public Class Form1 
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
      Dim x As New Class1 
      x.TempClass(Me) 
     End Sub 
End Class 

,然後你應該爲所有CheckBoxs行動的新類,如下面

Public Class Class1 
    Public Function TempClass(ByRef form As Control) 

     Dim allTxt As New List(Of Control) 
     For Each txt As CheckBox In FindControlRecursive(allTxt, form, GetType(CheckBox)) 
      txt.Enabled = False 
      txt.Checked = False 
     Next 
     Return form 
    End Function 



    Public Shared Function FindControlRecursive(ByVal list As List(Of Control), ByVal parent As Control, ByVal ctrlType As System.Type) As List(Of Control) 
     If parent Is Nothing Then Return list 
     If parent.GetType Is ctrlType Then 
      list.Add(parent) 
     End If 
     For Each child As Control In parent.Controls 
      FindControlRecursive(list, child, ctrlType) 
     Next 
     Return list 
    End Function 
End Class 
+0

和清除複選框?我必須使用什麼命令?謝謝 –

+0

hi @merdolodafoca對於這個樣本你不需要做任何事情,因爲這個功能會找出你表格上的所有複選框 –

+0

hi @merdolodafoca我改變了你想要的代碼,美好的一天 –

相關問題