当前位置: 代码迷 >> VB Dotnet >> 怎么获取 CheckBox改变后的状态
  详细解决方案

怎么获取 CheckBox改变后的状态

热度:129   发布时间:2016-04-25 02:14:53.0
如何获取 CheckBox改变后的状态?
比如一个CheckBox,默认为非选中状态,当运行时我点击选中后,用遍历控件的办法只能获取原来的值:非选中状态。如何能获取即时的状态呢?
------解决方案--------------------
引用:
我说的是用遍历控件时怎么判断,不是在CheckedChange时判断
Dim ii As Integer = 0
        Dim chk As CheckBox
        For Each c As Control In CheckBox10.Parent.Controls
            If TypeOf c Is CheckBox Then
                chk = c
                'If chk.CheckState = CheckState.Checked Then
                If chk.Checked = True Then
                    MsgBox(chk.Text)
                    ii = ii + 1
                End If
            End If
        Next
这个里面只能获取到原来设定的状态值,改变后判断不到,怎么在这儿判断呢?

 For Each c As Control In Me.Controls
            If (c.GetType.ToString = "System.Windows.Forms.CheckBox") Then
                Dim ch As CheckBox = c
                If (ch.Checked = True) Then
                    MessageBox.Show(ch.Name)
                End If
            End If
        Next
这是我写的遍历,没问题,自己对照下哪的问题吧....
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:


我是想在别人点击改变后重新获取所有选中的CheckBox状态然后判断执行不同的命令

哎,何必绕那么多弯路呢,直接把所有的CheckBox绑定到一个CheckedChange事件上,然后根据Sender的值做相应处理就行了...

呵呵,因为我用的多线程,里面的语句无法在CheckedChange中判断的。我调用一个sub,用一个button多次调用同一个sub,每次选中的值是不一定一样的。

那就定义一个全局变量,CheckBox每被选一次改变一下全局变量然后 传到你的Sub里面去...
------解决方案--------------------
在子线程里面访问主线程的窗体控件是不安全的,只好通过某些方式去迂回实现啦。
下面只解决 “只是需要多定义好几个变量,在调用时还得分开写变量调用的代码,有没有更好的办法呢?”这个问题。
在CheckBox的那个窗体代码里面先建立一个成员变量为:
private m_dicCheckBoxStatus as new Dictionary(Of String, Boolean)
在你的初始化代码处或者某些方便的地方调用一次如下代码,
        For Each ctl As Control In CheckBox10.Parent.Controls
            If TypeOf ctl Is CheckBox Then
                m_dicCheckBoxStatus.Add(ctl.Name, CType(ctl, CheckBox).Checked)
            End If
        Next
按照某种方式将CheckBox的最新状态保存进去,比方说用CheckedChange事件。
m_dicCheckBoxStatus(CType(sender, CheckBox).Name) = CType(ctl, CheckBox).Checked

在另一个线程的代码里面,访问这个变量就行了。

  相关解决方案