Bil*_*lly 116 .net c# radio-button winforms
使用WinForms; 有没有更好的方法来找到一个组的已检查RadioButton?在我看来,下面的代码不应该是必要的.当你检查一个不同的RadioButton然后它知道哪一个取消选中...所以它应该知道哪个被检查.如何在不执行大量if语句(或切换)的情况下提取该信息.
RadioButton rb = null;
if (m_RadioButton1.Checked == true)
{
rb = m_RadioButton1;
}
else if (m_RadioButton2.Checked == true)
{
rb = m_RadioButton2;
}
else if (m_RadioButton3.Checked == true)
{
rb = m_RadioButton3;
}
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 214
您可以使用LINQ:
var checkedButton = container.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked);
Run Code Online (Sandbox Code Playgroud)
请注意,这要求所有单选按钮直接位于同一容器中(例如,Panel或Form),并且容器中只有一个组.如果不是这种情况,您可以List<RadioButton>
在每个组的构造函数中创建s,然后编写list.FirstOrDefault(r => r.Checked)
.
Bob*_*bby 35
您可以将所有按钮的CheckedEvents连接到一个处理程序.在那里,您可以轻松获得正确的复选框.
// Wire all events into this.
private void AllCheckBoxes_CheckedChanged(Object sender, EventArgs e) {
// Check of the raiser of the event is a checked Checkbox.
// Of course we also need to to cast it first.
if (((RadioButton)sender).Checked) {
// This is the correct control.
RadioButton rb = (RadioButton)sender;
}
}
Run Code Online (Sandbox Code Playgroud)
Joã*_*elo 26
对于没有LINQ的人:
RadioButton GetCheckedRadio(Control container)
{
foreach (var control in container.Controls)
{
RadioButton radio = control as RadioButton;
if (radio != null && radio.Checked)
{
return radio;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
D'H*_*Hag 11
OP希望获得经过检查的RadioButton BY GROUP.虽然@SLaks的答案非常好,但它并没有真正回答OP的主要问题.要改进@SLaks的答案,只需将LINQ更进一步.
这是我自己的工作代码的一个例子.按照普通的WPF,我的RadioButtons包含在一个网格(名为"myGrid")中,其中包含许多其他类型的控件.我在Grid中有两个不同的RadioButton组.
要从特定组中获取已检查的RadioButton:
List<RadioButton> radioButtons = myGrid.Children.OfType<RadioButton>().ToList();
RadioButton rbTarget = radioButtons
.Where(r => r.GroupName == "GroupName" && r.IsChecked)
.Single();
Run Code Online (Sandbox Code Playgroud)
如果您的代码可能没有选中RadioButtons,那么请使用"SingleOrDefault()".(如果我没有使用三态按钮,那么我总是将一个按钮"IsChecked"设置为默认选择.)
归档时间: |
|
查看次数: |
290504 次 |
最近记录: |