2017-02-15 18 views
0

私はchecklistbox1を持っています。これは、folderbrowserdialogを持つ検索機能で満たされています。ひとつの項目(= XMLファイル)をチェックすると、それは別のクラスを呼び出すことによって特定のノードに従ってリストボックスを塗りつぶします。これは正常に動作します。Checkedlistbox:アイテムのチェックを外し、新しい選択時にアクションを再実行します。

私がチェックリストボックス1内の別のアイテムを選択すると、以前にチェックされたアイテムのチェックが外され、新たに選択されたアイテムのノードを表示する別のクラスが再度実行されます。

私のコードは、私が作った他の検索による試行のぼかしです。私がそれをしたいことを書き留めておいてください。これは、私が別の項目を選択したときにエラーを投げたくないので、私のコードを今持っているようなものではありません。前のバージョンの選択を解除して、新しく選択したアイテムに対して再度アクションを実行するだけです。

誰かが私を助けてくれることを願っています。

コード:

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

「私は有用なコードはありません」とあなたは確信しています。あなたの最も近い努力を投稿してください。これは、答えたい人には、その問題について大いに理解してもらうのに役立ちます。 [お問い合わせ]を読んで[ツアー] – Plutonix

+0

Plutonixありがとうございます。私は現時点でコードを追加しました。 – Woudi

答えて

0

あなたのコードは、他の形態への参照と少し厄介である私は(F5キーをClsScan?)推測しています。

一般的には、このコードはチェックされた項目と協力し、既存の項目のチェックを外します:

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 

メッセージボックスラインはあなたがあなたを行う必要があるものは何でも関数やメソッドに項目の参照を渡すと置き換えられますフィルタリング。

ItemCheckイベントに関する注意点の1つは、コレクション内のアイテムが実際ににチェックされていないことです。です。そのため、e.Indexの値に頼らざるを得ません。

+0

ラースありがとうございます。 CheckedIndicesは私が探していたものでした。それは今素晴らしいです!厄介なコードをごめんね。私はあなたの周りにあなたの道を作ってうれしいです。 – Woudi

関連する問題