C# 清除页面中的所有单选按钮
我的项目中有很多动态生成的单选按钮。可以根据数据库中的值对其进行检查。我想在单击按钮时清除所有单选按钮。我该怎么做呢?只要radioContainer是一个GroupBox,下面两个都可以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
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;
}
}
}
}
}