2012-07-21 26 views
0

我非常新的这一切,并同时我试图寻找我无法找到任何东西,帮助我实现我追求的。获得的所有复选框中的一个TabControl文本字符串

我在VB一个窗体具有以下:

1×的tabcontrol 10×复选框,其坐在各个选项卡上的标签控制 1×列表框

在i剔任何的复选框,我希望他们的文本被添加到列表框中,当我解开时,他们的文本将从列表框中获取。

我可以非常容易地使用每个复选框的changedcheck事件的if语句来实现这一点,但我必须为每个复选框都这样做,因为这可能会导致20,30个40+的复选框。另外,如果我在稍后阶段添加一个,我将不得不记得添加它的代码。

理想的情况下,我想这是一个方法,说:您在TabControl的所有复选框,如果有值为true写他们的文本字符串,如果值是假的,采取从字符串有文字。把该字符串放在列表框中。

我开始用这样的事情...

Dim chk As CheckBox 
Dim txt As String = "" 
For Each chk In TabControl1.Controls 
    If chk.Checked = True Then 
     txt = txt + chk.Text +vbCrLF 
    Else 
     txt = replace(txt, chk.text + vbCrLf, "") 
    End If 
Next 
     End Sub 

第一个问题是,上面显然是行不通的!所以任何指导表示赞赏 - 我把它从阅读其他代码的废料放在一起。

第二个问题是,我无法得到我的头如何列表框将被更新,因为以前我使用每个控件的CheckedChanged事件,如果我做我想做的事,那么不会是一个具体的CheckedChanged事件,因为它可能是任何复选框(希望这是有道理的!)。我不希望有按一个按钮,将选中的复选框添加到列表框,我希望它是动态的

任何帮助是非常赞赏。

回答

0

对于你的第一个问题添加

Dim chk As Control 
Dim txt As String = "" 
For Each chk In TabControl1.Controls 
If TypeOf chk Is CheckBox 
    If DirectCast(chk, CheckBox).Checked = True Then 
    txt = txt + chk.Text +vbCrLF 
    Else 
    txt = replace(txt, chk.text + vbCrLf, "") 
    End If 
End If 
Next 
    End Sub 

对于事件的CheckedChanged你的第二个问题,你可以做这样的事情:

Private Sub OnCheckedChanged(sender as Object, e as EventArgs) _ 
Handles CheckBox1.CheckedChanged 

    Dim chk As CheckBox = TryCast(s, CheckBox) 
    Dim txt as string 
    If c.Checked = True Then 
    txt = chk.Text 
    EndIf 

End Sub 
+0

非常感谢@jacob谢列兹尼奥夫的响应,我可以看到你已经完成了TypeOf,但由于我的tabcontrol中的所有控件总是复选框,我不会认为它需要它? - 虽然我会把你的话当作明确的不知道更好的!不幸的是,我得到使用修改后的代码时,下面...经过”不是成员‘System.Windows.Forms.Control的’。这可能是我应该知道的非常基本的东西,你能指出我正确的方向吗?再次感谢 – 2012-07-21 09:52:08

+0

@StephenDraper您需要强制类型转换CHK到复选框。看到我编辑的答案。 – 2012-07-21 10:19:53

相关问题