2017-08-08 8 views
-1

私を助けてください!
私はListViewのチェックボックスを有効にしています。チェックしたアイテムのチェックボックスをすべて無効にする必要があります。ユーザーは、チェックボックスをもう一度クリックしないでください。 ここに私のコードがあります。エラーが発生しています。私が正しくあなたの暗黙のロジックを理解していればリストビューは一度チェックされた特定のチェックボックスを無効にします

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 
    Try 
     ' submit 
     Dim path As String = "C:\Users\jtb43661\Documents\Visual Studio 2017\Projects\IGI Event Tracker\IGI Event Tracker\bin\Debug\Logs\Event.LOG" 
     If Not File.Exists(path) Then 
      Using sw As StreamWriter = File.CreateText(path) 
      End Using 
     End If 
     Using sw As StreamWriter = File.AppendText(path) 
      For Each item In ListView1.CheckedItems 
       sw.WriteLine(item.Text & "->" & " [email protected]> " & Label2.Text) 
       item.SubItems.Add("Completed") 
       item.BackColor = Color.GreenYellow 
       'If item.subItems.text = "Completed" Then 
       'here I need to disable or lock the checked checkboxes 

       'End If 
      Next 
      sw.Close() 
     End Using 
     MsgBox("Events Submitted Successfully") 
    Catch ex As Exception 
     MsgBox(ex.Message.ToString) 
    Finally 
    End Try 
End Sub 

答えて

2

、一度ListviewItemをチェックして「完了」に等しいTextプロパティとListViewSubItemが含まれますが、ユーザがその項目のチェックを外すことができるようにしたくありません。 「完了」サブアイテムの追加は、このようなボタンのクリックイベントハンドラの何かで実行されます。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    For Each itm As ListViewItem In ListView1.CheckedItems 
     ' add "Completed" subitem only if it does not currently exist 
     Dim hasCompleted As Boolean = False 
     For Each subitem As ListViewItem.ListViewSubItem In itm.SubItems 
      hasCompleted = subitem.Text.Equals("Completed") 
      If hasCompleted Then Exit For 
     Next 
     If Not hasCompleted Then itm.SubItems.Add("Completed") 
    Next 
End Sub 

は、私の知る限りでは、直接未確認であることから、それを防ぐためにListViewItem無効にする方法はありません。ただし、ListViewには、「チェック済み」状態の変更を防止するために使用できるItemCheckイベントがあります。次のコードは、「未チェック」の項目に「完了」というテキストのSubItemがある場合、Checked状態の変更を防止します。

Private Sub ListView1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles ListView1.ItemCheck 
    If e.CurrentValue = CheckState.Checked Then 
     Dim item As ListViewItem = ListView1.Items(e.Index) 
     For Each subitem As ListViewItem.ListViewSubItem In item.SubItems 
      If subitem.Text.Equals("Completed") Then 
       e.NewValue = e.CurrentValue ' do not allow the change 
       Exit For 
      End If 
     Next 
    End If 
End Sub 
+0

ありがとうございました。私は私の一日を作った – tharun

+0

@tharunその場合、回答をアップアップすることを検討してください。あなたは3年間メンバーになっていますが、QやAに投票したことは一度もありません。回答を投稿できない場合は、他人を助ける方法です。簡単な[ツアー]で詳細を説明します。 – Plutonix

+0

確かにPlutonix :) – tharun

関連する問題