【问题标题】:Update label text when radio is checked选中单选时更新标签文本
【发布时间】:2012-03-29 01:12:20
【问题描述】:

我有 3 个不同的单选按钮和一个标签。选中单选时如何更新该标签上的文本?

    private void Button_Click(object sender, EventArgs e)
    {
        foreach (Control item in groupBox1.Controls)
        {
            if(item.GetType() == typeof(RadioButton))
            {
                if (((RadioButton)item).Checked)
                {
                    label1.text = obj[item.TabIndex-1].name;
                }

            }

        }
    }

我写了类似的东西,但它连接到按钮,但我不希望它以这种方式工作。我想让事件连接到所有 3 个单选按钮,但我不知道该怎么做。

【问题讨论】:

  • 究竟你不知道该怎么做?将事件处理程序附加到单选按钮? 事件处理程序中写什么?

标签: c# forms radio-button label


【解决方案1】:

您应该考虑为每个单选按钮添加一个事件。具体来说,查看CheckedChanged 事件。

protected void ARadioButton_CheckedChanged(object sender, EventArgs e)
{
    if (sender is RadioButton)
    {
       RadioButton radioButton = (RadioButton)sender;
       if (radioButton.Checked)
       {
           label.Text = ARadioButton.Text;
       }
}

或者如 Oded 所述,使用相同的事件并利用 sender 参数。它们都会指向同一个事件。

//somewhere in your form object, probably InitializeComponent()
ARadioButton1.CheckChanged += new EventHandler(ARadioButton_CheckedChanged);
ARadioButton2.CheckChanged += new EventHandler(ARadioButton_CheckedChanged);
ARadioButton3.CheckChanged += new EventHandler(ARadioButton_CheckedChanged);

protected void ARadioButton_CheckedChanged(object sender, EventArgs e)
{
    if (sender is RadioButton)
    {
        RadioButton radioButton = (RadioButton)sender;
        if (radioButton.Checked)
        {
            label1.Text = "Clicked " + radioButton.Name;
        }
    }
}

【讨论】:

  • 您可以将 same 事件处理程序附加到三个按钮并使用 sender 参数(转换为正确的类型)。跨度>
  • 这就是我的意思。我还有一个问题。有什么方法可以检查更改了哪个单选按钮?我希望能够将标签的名称从类更改为字段的名称。这些单选按钮中的每一个都分配给类中的字段。我想使用类似'label1.text = obj[item.TabIndex-1].name;'
  • 我找到了解决方案 Label.Text = obj[((RadioButton)sender).TabIndex - 1].name; 成功了。我不知道是否有最好的方法,但它对我有用。
【解决方案2】:

您首先需要定义处理事件的方法。它可以与您上面的Button_Click 方法完全相同,但您应该更改名称,例如更改为radioButton_CheckedChanged

接下来,您需要将此方法连接到单选按钮在其选择状态更改时引发的事件。这应该在表单构造函数中完成,在调用InitializeComponent()之后:

   radioButton1.CheckedChanged += new System.EventHandler (radioButton_CheckedChanged);
   radioButton2.CheckedChanged += new System.EventHandler (radioButton_CheckedChanged);
   radioButton3.CheckedChanged += new System.EventHandler (radioButton_CheckedChanged);

radioButton1etc 替换为您的无线电控件的名称。

【讨论】:

    【解决方案3】:

    试试这个:

    private void radioButton_CheckedChanged(object sender, EventArgs e)
        {
            var element = sender as RadioButton;
            Debug.Assert(element != null, "element != null");
            if (element.Checked)
            {
                label1.Text = element.Name;
            }
        }
    

    【讨论】:

      【解决方案4】:
      btn1.Click += Button_Click;
      btn2.Click += Button_Click;
      btn3.Click += Button_Click;
      

      但这不是一个好方法,但我的回答是基于您的问题评论“我想让事件连接到所有 3 个单选按钮,但我不知道该怎么做。”

      【讨论】:

        猜你喜欢
        • 2016-03-30
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        相关资源
        最近更新 更多