none
【vb2010】關於 CheckedListbox的事件運用?! RRS feed

  • 問題

  • 前輩們好

    小弟的需求是

    點選一個項目之後

    整個List裡面有相同的全部都Checked

    小弟是用Timer去跑

    不知道CheckedListbox事件中有沒有相通的可以運用?

        Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
            Label1.Text = Format(Now(), "MM/dd HH:MM:ss")
    
    
            For j As Integer = 0 To CheckedListBox1.Items.Count - 1
                If CheckedListBox1.GetItemChecked(j) = True Then
                    Dim x() As String = Split(CheckedListBox1.Items.Item(j).ToString, ":")
    
                    For i As Integer = 0 To CheckedListBox1.Items.Count - 1
                        If CheckedListBox1.GetItemChecked(i) = False Then
                            Dim y() As String = Split(CheckedListBox1.Items.Item(i).ToString, ":")
                            If y(1) = x(1) Then
                                CheckedListBox1.SetItemChecked(i, True)
                            End If
                        End If
                    Next
                End If
                
            Next
    
        End Sub

    2012年10月24日 上午 06:50

解答

  • 最簡單的方法用個變數控制

    Public Class Form1 Private autocheck As Boolean = True Private Sub CheckedListBox1_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck If autocheck = True Then

    Dim x As Int32 = e.Index Mod 2 autocheck = False For i As Integer = 0 To CheckedListBox1.Items.Count - 1 If i Mod 2 = x Then CheckedListBox1.SetItemChecked(i, True) Else CheckedListBox1.SetItemChecked(i, False) End If Next autocheck = True End If End Sub End Class

    複雜一點的方法, 動態新增移除委派

    Public Class Form1
    
    	Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    		AddHandler CheckedListBox1.ItemCheck, AddressOf CheckedListBox1_ItemCheck
    	End Sub
    
    	Private Sub CheckedListBox1_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs)
    		RemoveHandler CheckedListBox1.ItemCheck, AddressOf CheckedListBox1_ItemCheck
    		Dim x As Int32 = e.Index Mod 2
    
    		For i As Integer = 0 To CheckedListBox1.Items.Count - 1
    			If i Mod 2 = x Then
    				CheckedListBox1.SetItemChecked(i, True)
    			Else
    				CheckedListBox1.SetItemChecked(i, False)
    			End If
    
    		Next
    		AddHandler CheckedListBox1.ItemCheck, AddressOf CheckedListBox1_ItemCheck
    	End Sub
    
    End Class


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2012年10月24日 上午 07:33
    版主

所有回覆

  • 它有 CheckedListBox.ItemCheck 事件 可以用


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年10月24日 上午 07:13
    版主
  • 謝謝Bill大大的回覆

    我剛剛用這個

    大概是因為語法的關係

    造成Loop了

    不知道哪裡有錯@@

    感覺 是

    跑For之後

    Checked False 變成 True

    又會觸發 CheckedListBox.ItemCheck 事件

    QQ

    2012年10月24日 上午 07:19
  • 最簡單的方法用個變數控制

    Public Class Form1 Private autocheck As Boolean = True Private Sub CheckedListBox1_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck If autocheck = True Then

    Dim x As Int32 = e.Index Mod 2 autocheck = False For i As Integer = 0 To CheckedListBox1.Items.Count - 1 If i Mod 2 = x Then CheckedListBox1.SetItemChecked(i, True) Else CheckedListBox1.SetItemChecked(i, False) End If Next autocheck = True End If End Sub End Class

    複雜一點的方法, 動態新增移除委派

    Public Class Form1
    
    	Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    		AddHandler CheckedListBox1.ItemCheck, AddressOf CheckedListBox1_ItemCheck
    	End Sub
    
    	Private Sub CheckedListBox1_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs)
    		RemoveHandler CheckedListBox1.ItemCheck, AddressOf CheckedListBox1_ItemCheck
    		Dim x As Int32 = e.Index Mod 2
    
    		For i As Integer = 0 To CheckedListBox1.Items.Count - 1
    			If i Mod 2 = x Then
    				CheckedListBox1.SetItemChecked(i, True)
    			Else
    				CheckedListBox1.SetItemChecked(i, False)
    			End If
    
    		Next
    		AddHandler CheckedListBox1.ItemCheck, AddressOf CheckedListBox1_ItemCheck
    	End Sub
    
    End Class


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2012年10月24日 上午 07:33
    版主
  • 感謝 Bill大大

    小弟力馬來試試看

    感恩~

    2012年10月24日 上午 07:38