繁体   English   中英

C#单选按钮数组,如何找到所选内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM