比如一个CheckBox,默认为非选中状态,当运行时我点击选中后,用遍历控件的办法只能获取原来的值:非选中状态。如何能获取即时的状态呢?
------解决方案--------------------
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
这是我写的遍历,没问题,自己对照下哪的问题吧....
------解决方案--------------------
那就定义一个全局变量,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
在另一个线程的代码里面,访问这个变量就行了。