以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  用复选框模拟单选框  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=7259)

--  作者:狐狸爸爸
--  发布时间:2010/6/1 9:45:00
--  用复选框模拟单选框

用复选框模拟单选框

 

我们知道通过将RadioButton(单选框)放在不同的容器中,可以对其进行分组,同一容器中的多个单选框,其选中状态是互斥的,选中一个单选框,之前选中的单选框将被自动撤销选中状态。
这有一个问题,就是在打印窗口的时候,容器中的控件是不会打印的,所以所有的RadioButton必须直接置于窗口中,但只这样一来就不能对RadioButton分组。
这个问题是无解的,RadioButton置于容器中可以分组,但是不能打印,置于窗口中可以打印,但是不能分组。

 

我们只能用折中的方案来解决这个问题,用CheckBox(复选框)来模拟RadioButton,通过设置代码,使得选择某个复选框后,取消同一分组其它复选框的选中状态。

 

例如在窗口加入6个CheckBox,其中CheckBox1、CheckBox2、CheckBox3为一组,CheckBox3、CheckBox4、CheckBox5为一组,为了实现RadioButton的效果,可以在窗口的全局事件CheckedChanged加入代码:

 

Dim nm As String = e.Sender.Name
Select
Case nm
    Case
"CheckBox1","CheckBox2",
"CheckBox3"
   
    If e.Sender.Checked Then
            e.Form.Controls(
"CheckBox1").Checked = (nm = "CheckBox1")
            e.Form.Controls(
"CheckBox2").Checked = (nm = "CheckBox2")
            e.Form.Controls(
"CheckBox3").Checked = (nm = "CheckBox3")
        End
If
   
Case "CheckBox4","CheckBox5","CheckBox6"
       
If e.Sender.Checked Then
            e.Form.Controls(
"CheckBox4").Checked = (nm = "CheckBox4")
            e.Form.Controls(
"CheckBox5").Checked = (nm = "CheckBox5")
            e.Form.Controls(
"CheckBox6").Checked = (nm = "CheckBox6")
        End
If
End
Select

 

再次提示,上述代码必须设置在窗口的全局事件CheckedChanged中,而不是单个控件的CheckedChanged事件中。

 

上面的代码需要5.31更新,因为只有5.31更新全局事件才包括ItemChanged。

[此贴子已经被作者于2010-6-1 9:48:12编辑过]

--  作者:blackzhu
--  发布时间:2010/6/1 9:54:00
--  
学习
--  作者:i52117
--  发布时间:2010/6/1 9:56:00
--  
收藏
--  作者:yangming
--  发布时间:2010/6/1 11:10:00
--  
学习!
--  作者:fubblyc
--  发布时间:2014/6/28 18:55:00
--  

谢谢狐爸,正好需要!!

[此贴子已经被作者于2014-6-28 18:55:25编辑过]