[英]C# radio button array, how to find selected
我有以下c#代码将创建一个单选按钮数组。 我如何检查选择了哪个按钮而无需逐个查看每个按钮?
谢谢。
public Form1()
{
InitializeComponent();
string[] stringArray = new string[3];
stringArray[0] = "Yes";
stringArray[1] = "No";
stringArray[2] = "Maybe";
System.Windows.Forms.RadioButton[] radioButtons = new System.Windows.Forms.RadioButton[3];
for (int i = 0; i < 3; ++i)
{
radioButtons[i] = new RadioButton();
radioButtons[i].Text = stringArray[i];
radioButtons[i].Location = new System.Drawing.Point(10, 10 + i * 20);
this.Controls.Add(radioButtons[i]);
}
}
RadioButton selected = radioButtons.FirstOrDefault(r => r.Checked);
创建后,所有的FirstOrDefault
按钮都将被取消选中,这就是为什么我使用FirstOrDefault
而不是First
。 因此,您应该检查selected
是否不为null
。
更新:如果您希望每次选定的单选按钮更改时都要做某事(例如,用单选按钮文本更新某些标签),则循环所有单选按钮不是最佳解决方案。 您可以将所有CheckedChanged
按钮预订到同一CheckedChanged
事件处理程序。 在循环中添加
radioButtons[i].CheckedChanged += RadioButton_CheckedChanged;
和处理程序是
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
var radiobutton = (RadioButton)sender;
if (radiobutton.Checked)
{
// some logic here
label.Text = radiobutton.Text;
}
}
更新:上面的Linq查询是
RadioButton selected = null;
foreach(var r in radioButtons)
{
if (r.Checked)
{
selected = r;
break;
}
}
您可以将索引存储在未使用的任何属性中。 即。 Tag
radioButtons[i].Tag = i
您可以处理该元素的CheckedChanged
事件
AddHandler radioButtons[i].CheckedChange, AddressOf Item_CheckedChange
现在,您可以编写代码以从Tag属性中检索选定的索引。
Dim iSelectedIndex As Integer = -1
Private Sub Item_CheckedChange(...)
Dim Item As RadioButton = DirectCast(sender, RadioButton)
If Item.Checked Then
'Here you will get the selected radio button from Item object
iSelectedIndex = CInt(Item.Tag)
End If
End Sub
您可以使用radio button checked
事件。 所有单选按钮的首次注册事件:
//Modifying for loop
for (int i = 0; i < 3; ++i)
{
radioButtons[i] = new RadioButton();
radioButtons[i].Text = stringArray[i];
radioButtons[i].Location = new System.Drawing.Point(10, 10 + i * 20);
radioButtons[i].CheckedChanged += radioButton_CheckedChanged; //added
this.Controls.Add(radioButtons[i]);
}
创建新事件:
RadioButton checkedButton;
void radioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton tempRdBtn = sender as RadioButton;
if (tempRdBtn.Checked)
checkedButton = tempRdBtn;
}
最后,您可以选中选中项目的checkedButton
。 如果为null
,则表示未选择任何项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.