C#如何实现多个checkbox只能唯一选择,并获得相应的数据?最好贴上代码!感谢!!!

解决方案 »

  1.   

    用RadioButton吧
    http://msdn.microsoft.com/zh-cn/library/system.windows.controls.radiobutton.aspx
      

  2.   

    好像不通过代码只有用RadioButton。  将他们设置成为一组的,要用checkBox估计只能用代码设置他们的checked属性了,当一个为true时其他的为false就行了
      

  3.   

    服务器控件 findcontrol
    JS先全部不选种,再选种标记的.
      

  4.   

    既然要唯一选择 为什么要用CheckBox  不懂
      

  5.   


    最简单的方法:有多少个选项就拖多少个Panel进去,把checkbox放到panel上就行了原理:Checkbox的选择是根据组来确定的,如果不把这些checkbox放在一个组里就和Radiobutton的功能差不多了呵呵
    你以前不能多选,可能是都放在了窗体上,那么编译器会认为你的checkbox都属于Form这个组,因此不能单选
      

  6.   

    据说可以把checkbox的外观重绘成radiobutton的样子,我找了很多例子都没有试验成功过,有可能是种以讹传讹的帖子吧呵呵。不过你要按我的方法把CheckBox放在不同的组就行了。我有个项目就是这么做的
      

  7.   


    我可能理解错你的意思了,你的意思是一大堆checkbox,只能选中其中一个项对吗?这可以通过写代码来处理。我写个代码测试一下呵呵
      

  8.   

    1 RedioButton可以修改外观为Button样式
    2 CheckBox可以使用Mouse_Up mouse_Down事件实现,就是必须有一个且只有一个被选中。
      

  9.   

    用一个GroupBox 里面放几个RadioButton,数据就是RadioButton的Text属性string value="";
    foreach (Control ctl in groupBox.Controls)
                {
                    if (((RadioButton)ctl).Checked == true)
                    {
                        value = ((RadioButton)ctl).Text;
                    }
                }
      

  10.   

    使用一个CheckedChanged
    CheckBox chk=sender as CheckBox;
    for遍历设置其他为false
      

  11.   


    下班回家,刚帮你写的代码,测试通过呵呵using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace testcheckbox
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void check_cb(CheckBox args_cb)
            {
                foreach (Control ctl in this.Controls)
                {
                    //is操作符 : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常。此代码检验遍历的控件是否checkbox
                    if (ctl is CheckBox)
                    {
                        //as操作符:与强制类型转换是一样的,但是永远不会抛出异常,即如果转换不成功,会返回null。此代码尝试将控件转换为checkbox
                        CheckBox cb = ctl as CheckBox;
                        //如果转换成功
                        if (cb != null)
                        {
                            //将复选框设为非选中状态
                            cb.Checked = false;
                        }
                    }
                }
                //将传参的复选框亦即点击的复选框设为选中状态
                args_cb.Checked = true;
            }        private void checkBox1_Click_1(object sender, EventArgs e)
            {
                check_cb(checkBox1);
            }        private void checkBox2_Click(object sender, EventArgs e)
            {
                check_cb(checkBox2);
            }        private void checkBox3_Click(object sender, EventArgs e)
            {
                check_cb(checkBox3);
            }        private void checkBox4_Click(object sender, EventArgs e)
            {
                check_cb(checkBox4);
            }
        }
    }
    结贴给分吧
      

  12.   


    再次说明代码的意思:建立一个方法:private void check_cb(CheckBox args_cb)
    方法的参数是CheckBox类型的,args_cb参数表示点击的哪个按钮
    方法的逻辑我用注释给你标记清了,自己看看就能明白,很简单的。然后将按钮的点击的触发事件设置为:Click,然后在事件中调用方法,参数为点击的按钮的名字即可。
    千万不要双击按钮让自动生成的事件为CheckedChanged,否则清空按钮的方法会陷入死循环。下午帮你测试的时候就是不小心双击按钮使用VS自动生成的CheckedChanged事件,结果程序陷入死循环,因为每次按钮状态的变化都会触发事件,事件被触发后又重复触发事件...........
      

  13.   

    忘了加判断选中的是哪一个呵呵
            private void check_cb(CheckBox args_cb)
            {
                foreach (Control ctl in this.Controls)
                {
                    //is操作符 : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常。此代码检验遍历的控件是否checkbox
                    if (ctl is CheckBox)
                    {
                        //as操作符:与强制类型转换是一样的,但是永远不会抛出异常,即如果转换不成功,会返回null。此代码尝试将控件转换为checkbox
                        CheckBox cb = ctl as CheckBox;
                        //如果转换成功
                        if (cb != null)
                        {
                            //将复选框设为非选中状态
                            cb.Checked = false;
                        }
                    }
                }
                //将传参的复选框亦即点击的复选框设为选中状态,并判断选中的是哪一个
                args_cb.Checked = true;
               MessageBox.Show("选中了:"+args_cb.Name+" 复选框");
            }