2017-02-15 7 views
0

Ich habe eine checkedlistbox1, die über eine Suchfunktion mit einem Ordnerbrowserdialog gefüllt wird. Sobald ich ein Element (= XML-Datei) überprüft habe, füllt es ein Listenfeld nach bestimmten Knoten, indem es eine separate Klasse aufruft. Das funktioniert gut.Checkedlistbox: Objekte abwählen und Aktion bei neuer Auswahl erneut ausführen

Was ich als nächstes tun möchte, ist, wenn ich ein anderes Element in cheweredlistbox1 wähle, hebt es das zuvor geprüfte Element auf und führt die separate Klasse erneut aus, um die Knoten des neu ausgewählten Elements anzuzeigen.

Mein Code ist eine Unschärfe von Versuchen nach anderen Suchen, die ich gemacht habe. Bitte nimm zur Kenntnis, was ich tun soll. Das ist nicht so, als hätte ich meinen Code jetzt, weil ich nicht möchte, dass ein Fehler auftritt, wenn ich ein anderes Objekt auswähle. Ich möchte nur, dass die vorherige Auswahl rückgängig gemacht wird und die Aktion für den neu ausgewählten Artikel erneut ausgeführt wird.

Ich hoffe, dass mir jemand hier helfen kann.

Code:

Try 
     Dim checkLstBox As CheckedListBox = CType(sender, CheckedListBox) 
     Dim targetNum As Integer = 1 
     If e.NewValue = CheckState.Checked AndAlso checkLstBox.CheckedItems.Count + 1 > targetNum Then 
      Call ClsMessageBoxes.CheckedListbox1_maxcheck_Form2() 
      e.NewValue = CheckState.Unchecked 
      For i As Integer = 0 To f5.CheckedListBox1.Items.Count - 1 
       f5.CheckedListBox1.SetItemChecked(i, False) 
      Next 'This part at least throws an error if I select a new item in checkedlistbox1 and de-selects the previous item' 

     Else 
      'this part does not work' 
      f5.ListBoxDestPlate.Items.Clear() 
      f5.CheckedListlistbox2.SelectedItems.Clear() 

      'this part is meant to select an item in another checkbox according to certain tekst in the filename' 
      Dim i As Integer 
      If ClsSharedProperties2.filePath2.Contains("Text1") Then 
       i = 1 
       f5.Checkedlistbox2.SetItemChecked(i, True) 
       Call ClsScan.scanning2() 

      ElseIf ClsSharedProperties2.filePath2.Contains("Text2") Then 
       i = 2 
       f5.Checkedlistbox2.SetItemChecked(i, True) 
       Call ClsScan.scanning2() 
      End If 
     End If 
    Catch ex As Exception 
     MessageBox.Show(ex.Message & vbCrLf & "Stack Trace: " & vbCrLf & ex.StackTrace) 
End Try 
+2

'Ich habe keinen nützlichen Code' sicher, dass Sie tun. Veröffentlichen Sie Ihre engsten Bemühungen. Es wird jedem, der antworten möchte, helfen, eine Menge über das Problem zu verstehen. Bitte lesen [fragen] und nehmen Sie die [Tour] – Plutonix

+0

Danke Plutonix. Ich habe den Code so hinzugefügt, wie er gerade ist. – Woudi

Antwort

0

Ihr Code ist ein bisschen chaotisch mit Verweisen auf andere Formen Ich vermute (f5 ClsScan?).

Im Allgemeinen Dieser Code wird mit dem geprüften Objekt arbeiten und deaktivieren Sie alle vorhandenen Elemente:

Private Sub clb_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles clb.ItemCheck 
    If e.NewValue = CheckState.Checked Then 
    For Each i As Integer In clb.CheckedIndices 
     clb.SetItemChecked(i, False) 
    Next 
    MessageBox.Show("Checked " & clb.Items(e.Index).ToString) 
    End If 
End Sub 

Die MessageBox Linie würde mit Ihnen Referenz vorbei das Element ersetzt werden, was auch immer Funktion oder Methode, die Sie benötigen, um Ihre zu tun Filterung.

Eine Sache in Bezug auf das ItemCheck-Ereignis zu beachten ist, dass das Element in der Sammlung nicht tatsächlich überprüft noch ist. Deshalb müssten Sie sich auf den Wert von e.Index verlassen.

+0

Danke Lars. Die CheckedIndices war, was ich suchte. Es funktioniert jetzt super! Entschuldigung für den unordentlichen Code. Ich bin froh, dass du dich darum gekümmert hast. – Woudi

Verwandte Themen