2012-02-24 20 views
6

मुझे VB.NET CheckedListBox नियंत्रण में सभी आइटमों को चुनने और अचयनित करने की आवश्यकता है, ऐसा करने का सबसे अच्छा तरीका क्या है?VB.NET में सभी आइटमों को चेक या अनचेक करने के लिए चेक किए गए लिस्टबॉक्स नियंत्रण

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

     With clbCheckedListBox 

     .Items.Add("Select/UnSelect All") 
     .Items.Add("Enero") 
     .Items.Add("Febrero") 
     .Items.Add("Marzo") 
     .Items.Add("Abril") 
     .Items.Add("Mayo") 
     .Items.Add("Junio") 
     .Items.Add("Julio") 
     .Items.Add("Agosto") 
     .Items.Add("Septiembre") 
     .Items.Add("Octubre") 
     .Items.Add("Noviembre") 
     .Items.Add("Diciembre") 

     .SelectedIndex = 0 

    End With 


End Sub 


    Private Sub clbCheckedListBox_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles clbCheckedListBox.ItemCheck 

    If e.Index = 0 Then 

     If e.NewValue = CheckState.Checked Then 

      For idx As Integer = 1 To Me.clbCheckedListBox.Items.Count - 1 
       Me.clbCheckedListBox.SetItemCheckState(idx, CheckState.Checked) 
      Next 

     ElseIf e.NewValue = CheckState.Unchecked Then 

      For idx As Integer = 1 To Me.clbCheckedListBox.Items.Count - 1 
       Me.clbCheckedListBox.SetItemCheckState(idx, CheckState.Unchecked) 
      Next 

     End If 

    End If 

End Sub 

घंटे के बाद उपरोक्त कोड मेरे लिए ठीक काम करता है!

Dim checked As Boolean = True ' Set to True or False, as required. 
For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
    CheckedListBox1.SetItemChecked(i, checked) 
Next 

यहाँ मैं सिर्फ सभी CheckedListBox आइटम के माध्यम से पाशन कर रहा हूँ और उनके जाँच की राज्य की स्थापना:

+0

कृपया उचित उत्तर चिह्नित करें। –

उत्तर

3

रिकार्डो, शायद यह हो सकता है आप के लिए क्या देख रहे:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim items$() = New String() {"Select/UnSelect All", "Enero", 
    "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", 
    "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"} 
    For Each Str As String In items : clbCheckedListBox.Items.Add(Str) : Next 
End Sub ' Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) 

Private Sub clbCheckedListBox_ItemCheck(sender As System.Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles clbCheckedListBox.ItemCheck 
    If e.Index = 0 Then 
     Dim newCheckedState As CheckState = e.NewValue 
     For idx As Integer = 1 To clbCheckedListBox.Items.Count - 1 
      Me.clbCheckedListBox.SetItemCheckState(idx, newCheckedState) 
     Next 
    End If 
End Sub 
+0

मुझे पता है कि यह उत्तर के रूप में चिह्नित है, लेकिन आप इंडेक्स 1 से शुरू कर रहे हैं और SetItemCheckState किसी भी कोड में काम नहीं करेगा जो मैंने कभी भी किया है, केवल SetItem चेक किए गए काम। – Keith

+0

@ किथ: हाँ यह जानबूझकर पहले आइटम को छोड़ देता है क्योंकि पहला आइटम 'सभी का चयन/अनदेखा करें' है। – Edward

+0

और मैंने इसे पोस्ट करने से पहले उस कोड का परीक्षण किया। तो मुझे पता है कि कोड मेरे लिए काम करता है। कीथ, क्या SetItemCheckState WinForms या WPF में आपके लिए काम नहीं करता है? मैंने WinForm प्रोजेक्ट का उपयोग किया। मैंने अपनी राय में वीएस 2010 का इस्तेमाल किया, बाद में वीएस 2012 और 2013 डाउनग्रेड थे। लेकिन मुझे नहीं लगता कि वीएस संस्करण विड पदार्थ है। मुझे पता है कि मैंने .NET 4 वातावरण का उपयोग किया (मुझे लगता है .NET 4.5)। कभी-कभी एमएस quirks के साथ मायने रखता है। हो सकता है कि आप अपने पर्यावरण की तुलना करना चाहें जो SetItemCheckState के साथ मेरे पर्यावरण में काम नहीं करता है। – Edward

14

आप कुछ इस तरह का मतलब है।

1
To check all CheckedListBox Item: 

For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
    CheckedListBox1.SetItemChecked(i, True) 
Next 

To uncheck all CheckedListBox Item: 

For i As Integer = 0 To CheckedListBox1.Items.Count - 1 
    CheckedListBox1.SetItemChecked(i, false) 
Next 
4
If button.Text = "Select All" Then 
    For i As Integer = 0 To checklist.Items.Count - 1 
     checklist.SetItemChecked(i, True) 
    Next 
    Button.Text = "Deselect All" 
Else 
    For i As Integer = 0 To checklist.Items.Count - 1 
     checklist.SetItemChecked(i, False) 
     Button.Text = "Select All" 
    Next 
End If 
0

जोड़ा एक अलग checkbox "सभी का चयन करें" कहा जाता है। checklistbox की वस्तुओं को चेक और अनचेक करने पर चयनित या अचयनित किया जा सकता है। तो आप अपने कोड में कहीं भी इस Kb() फ़ंक्शन को कॉल कर सकते हैं:

Private Sub ChkSelectAll_Click(sender As Object, e As EventArgs) Handles ChkSelectAll.Click 
    Kb(ChkSelectAll.CheckState) 
End Sub 

Private Sub Kb(ByVal Key As Boolean) 
    For i As Integer = 0 To ChkLstServices.Items.Count - 1 
     ChkLstServices.SetItemChecked(i, Key) 
    Next 
End Sub 
0

रखें में इस कोड घटना SelectedValueChanged।

Private Sub clbCheckedListBox_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles ContrListCheckBox.SelectedValueChanged 
    If clbCheckedListBox.SelectedIndex = 0 Then 
     If clbCheckedListBox.GetItemChecked(0) = False Then 
      For idx As Integer = 1 To clbCheckedListBox.Items.Count - 1 

       Me.clbCheckedListBox.SetItemChecked(idx, False) 
      Next 
     Else 
      For idx As Integer = 1 To ContrListCheckBox.Items.Count - 1 

       Me.clbCheckedListBox.SetItemChecked(idx, True) 
      Next 
     End If 
    ElseIf clbCheckedListBox.SelectedIndex > 0 Then 
     If clbCheckedListBox.CheckedItems.Count = clbCheckedListBox.Items.Count - 1 And clbCheckedListBox.GetItemChecked(0) = False Then 
      clbCheckedListBox.SetItemCheckState(0, CheckState.Checked) 
     End If 
     For idx As Integer = 1 To clbCheckedListBox.Items.Count - 1 

      If clbCheckedListBox.GetItemChecked(idx) = False Then 
       clbCheckedListBox.SetItemCheckState(0, CheckState.Unchecked) 

      End If 
     Next 
    End If 
End Sub 

अन्य समाधान सही हैं, लेकिन यदि आप और CheckBoxList अंदर एक और चेकबॉक्स का चयन रद्द या Select All चेकबॉक्स शीर्ष चेकबॉक्स चेक रहेगा बिना CheckBoxList खाली करने के लिए चाहते हैं कि उसे तार्किक तो ऊपर दिए गए कोड इस समस्या का समाधान करना चाहिए नहीं है ।

1

मुझे पता चला कि clbCheckedListBox.clearSelection() सभी को अचयनित करने के लिए अच्छी तरह से काम करता है।

+0

एसओ ट्रे में आपका स्वागत है :-)। आम तौर पर उन पुराने प्रश्नों को जोड़ना एक अच्छा विचार नहीं है जो पहले से ही हैं और पहले से ही एक स्वीकार्य उत्तर है। इसके अलावा, उत्तरों को केवल एक पंक्ति से अधिक लिखने के लिए प्रोत्साहित किया जाता है - अन्यथा शायद एक टिप्पणी बेहतर होगी। अंत में, प्रारूप प्रारूपों को सही तरीके से आज़माएं क्योंकि यह सुगमता में सहायता करता है; इस मामले में कोड स्वरूपित किया जा सकता है (मैं आगे बढ़ूंगा और संपादित करूँगा ताकि आप देख सकें कि मेरा क्या मतलब है)। – Toby

+0

@ ट्रे का मतलब है 'साफ़ करें() '? .NET लक्ष्य ढांचे 4.5 के साथ मेरा विजुअलस्टूडियो 2017 आपके सुझाव को स्वीकार नहीं करता है। और सिर्फ रिकॉर्ड्स के लिए: यह आइटम को अनचेक नहीं करता है, बस उन्हें अचयनित करें। – PeterCo

संबंधित मुद्दे