Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 清除页面中的所有单选按钮_C#_.net_Winforms - Fatal编程技术网

C# 清除页面中的所有单选按钮

C# 清除页面中的所有单选按钮,c#,.net,winforms,C#,.net,Winforms,我的项目中有很多动态生成的单选按钮。可以根据数据库中的值对其进行检查。我想在单击按钮时清除所有单选按钮。我该怎么做呢?只要radioContainer是一个GroupBox,下面两个都可以 private void button1_Click(object sender, EventArgs e) { // This will remove the radiobuttons completely... _radioContainer.Controls.OfType<Rad

我的项目中有很多动态生成的单选按钮。可以根据数据库中的值对其进行检查。我想在单击按钮时清除所有单选按钮。我该怎么做呢?

只要radioContainer是一个GroupBox,下面两个都可以

private void button1_Click(object sender, EventArgs e) {

    // This will remove the radiobuttons completely...
    _radioContainer.Controls.OfType<RadioButton>().ToList().ForEach(p => _radioContainer.Controls.Remove(p));

    // Either of the below will clear the checked state
    _radioContainer.Controls.OfType<RadioButton>().ToList().ForEach(p => p.Checked = false);

    foreach (RadioButton radio in _radioContainer.Controls.OfType<RadioButton>().ToList()) {
        if (radio.Checked == true) {
            radio.Checked = false;
            break;
        }
    }
}
private void按钮1\u单击(对象发送者,事件参数e){
//这将完全删除单选按钮。。。
_radioContainer.Controls.OfType().ToList().ForEach(p=>\u radioContainer.Controls.Remove(p));
//以下任一选项都将清除选中状态
_radioContainer.Controls.OfType().ToList().ForEach(p=>p.Checked=false);
foreach(radioContainer.Controls.OfType().ToList()中的RadioButton单选){
如果(radio.Checked==true){
radio.Checked=false;
打破
}
}
}

我不知道是否是这种情况,但您可能在其他控件中嵌套了单选按钮。如果是这种情况,您需要检查所有控件的所有.Controls集合,以便找到它们并将其关闭。可以使用此帮助器函数执行以下操作:

    void ExecuteOnAllChildren<U>(Control c, Action<Control> T) where U : Control
    {
        c.Controls.OfType<U>().ToList().ForEach(a => T(a) );

        foreach(Control childControl in c.Controls)
            ExecuteOnAllChildren<U>(childControl, T);

    }
void ExecuteOnAllChildren(控件c,操作T),其中U:Control
{
c、 控件.OfType().ToList().ForEach(a=>T(a));
foreach(c.Controls中的Control-childControl)
执行所有儿童(儿童控制,T);
}
你可以这样说:

    ExecuteOnAllChildren<RadioButton>(this, a => { a.Checked = false; });
ExecuteOnAllChildren(this,a=>{a.Checked=false;});
(我假设“this”是您的表单。否则,请将“this”替换为您希望进行所有替换的表单。)

检查此项:

private void button1_Click(object sender, EventArgs e) 
{
    var cntls = GetAll(this, typeof(RadioButton));
    foreach (Control cntrl in cntls)
    {
        RadioButton _rb = (RadioButton)cntrl;
        if (_rb.Checked)
        {
            _rb.Checked = false;
        }
    }
}

public IEnumerable<Control> GetAll(Control control, Type type)
{
    var controls = control.Controls.Cast<Control>();
    return controls.SelectMany(ctrls => GetAll(ctrls, type)).Concat(controls).Where(c => c.GetType() == type);
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var cntls=GetAll(这个,typeof(RadioButton));
foreach(CNTL中的控制cntrl)
{
RadioButton _rb=(RadioButton)cntrl;
如果(_rb.选中)
{
_rb.Checked=false;
}
}
}
公共IEnumerable GetAll(控件,类型)
{
var controls=control.controls.Cast();
返回控件.SelectMany(ctrls=>GetAll(ctrls,type)).Concat(控件)。其中(c=>c.GetType()==type);
}

这将清除单击按钮时选中的所有单选按钮。

我遇到了类似的问题,其他答案都没有用

我想用两个单选按钮初始化一个Winform对话框,这两个按钮都应该被取消选中。用户必须在选择某项内容之前做出明确的选择(如本问题所示:)

问题是:第一个单选按钮(带有较低的
选项卡索引的单选按钮)总是预先检查的。手动取消选中一个,只选中另一个(无论是在构造函数中还是在
加载
事件中)


解决方案:将两个
单选按钮的
TabStop
属性设置为false。不过别问我为什么。

我相信有一些有效的方法可以用JQuery实现这一点。虽然不是专家,但我认为快速的谷歌搜索可能会带来一些结果。@Joachim-他正在使用WinForms。遍历所有控件并检查它们的类型。如果它们是单选按钮,则删除。我的坏消息。忘了我说过什么。你是想取消选中所有单选按钮,还是要删除它们?如果你的单选按钮跨越多个groupbox,你可以使用“OfType”扩展先搜索groupbox,然后在每个groupbox中搜索单选按钮。谢谢你的解决方案!如果
TabStop
设置为
true
,则会自动选择其中一个单选按钮(最低的
TabIndex
),即使您尝试以编程方式取消选中该按钮。
void Button1Click(object sender, EventArgs e)
{
    foreach (Control ctrl in Controls)
    {
        if (ctrl is Panel)
        {
            foreach (Control rdb in ctrl.Controls)
            {
                if (rdb is RadioButton && ((RadioButton)rdb).Checked == true)
                {
                    ((RadioButton)rdb).Checked = false;
                }
            }
        }
    }
}