C#单选按钮数组,如何查找选中

use*_*812 0 .net c# winforms

我有以下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]);
            }
        }
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 5

RadioButton selected = radioButtons.FirstOrDefault(r => r.Checked);
Run Code Online (Sandbox Code Playgroud)

在创建之后,所有的radiobuttons都将被取消选中,这就是我使用FirstOrDefault而不是First.所以,你应该检查一下selected是不是null.

更新:如果您想在每次选择的radiobutton更改时执行某些操作(例如,使用radiobutton文本更新某些标签),则循环所有单选按钮不是最佳解决方案.您可以将所有radiobuttons订阅到同一个CheckedChanged事件处理程序.在你的循环添加

radioButtons[i].CheckedChanged += RadioButton_CheckedChanged;
Run Code Online (Sandbox Code Playgroud)

处理程序是

private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
    var radiobutton = (RadioButton)sender;
    if (radiobutton.Checked)
    {
        // some logic here
        label.Text = radiobutton.Text;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:上面的Linq查询是一个快捷方式

RadioButton selected = null;

foreach(var r in radioButtons)
{
    if (r.Checked)
    {
        selected = r;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是他要求不检查所有元素.我认为创建`checked`事件是查找已检查哪个元素的更好方法. (2认同)