2012-07-21 50 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

相關問題