【问题标题】:Switch Case with Radio Button - C#带单选按钮的开关盒 - C#
【发布时间】:2017-03-07 23:58:15
【问题描述】:

我正在尝试开发一个 switch case 语句,它允许我根据我选择的 3 个单选按钮中的哪一个来运行代码。我有一个消息框语句告诉我这是否成功,但它从未显示,所以我确定我做错了什么

任何建议都会很棒

    public void button2_Click(object sender, EventArgs e)
    {

        RadioButton radioBtn = new RadioButton();
        if (radioBtn.Enabled == true)
        {
            switch (radioBtn.Name)
            {
                case "radioButton1":
                    ComicBooks CB = new ComicBooks();
                    CB.setTitle(textBox1.Text);
                    MessageBox.Show(CB.Title);
                    break;

                case "radioButton2":
                    //do something
                    break;

                case "radioButton3":
                    //do something
                    break;

            } 

        }

【问题讨论】:

  • RadioButton radioBtn = (RadioButton)sender;
  • 你正在创建一个没有名字的新RadioButton,所以它当然什么都不做
  • 没有@JohnnyMopp。这似乎是一个 Button Click 事件,因此您无法将 sender 投射到 RadioButton
  • @Pikoh 我不关注你。那个名字是radioBtn
  • @Justin 你正在创建一个RadioButton 的新实例,你没有在你的用户界面上调用这个实例。您需要使用类似 this.radioBtn.Name 的内容,并删除顶部的实例化。

标签: c# radio-button switch-statement


【解决方案1】:

您的代码的问题是您在此处创建了RadioButton 的新实例:

RadioButton radioBtn = new RadioButton();

此实例未连接到 UI 中的任何内容,也未设置 Name 属性,因此它不匹配任何 switchcase。

如果您想检查单击按钮时选择了什么RadioButton,并根据其名称执行某些操作,您可以这样做:

RadioButton radioBtn = this.Controls.OfType<RadioButton>()
                                       .Where(x=>x.Checked).FirstOrDefault();
if (radioBtn!=null)
{
    switch (radioBtn.Name)
    {
        case "radioButton1":
           //Your switch structure here ...

}

如果RadioButtons 不在表单本身中,但例如在面板中,您需要为此更改我的代码的第一行:

RadioButton radioBtn = this.panel1.Controls.OfType<RadioButton>()
                                           .Where(x=>x.Checked).FirstOrDefault();

通知this.panel1.Controls部分

【讨论】:

  • var name = this.panel1.Controls.OfType&lt;RadioButton&gt;().FirstOrDefault(x =&gt; x.Checked)?.Name; 会更惯用。
【解决方案2】:

在这一行中,您将创建一个全新的 RadioButton 对象并创建一个名为 radioBtn 的对它的引用。

RadioButton radioBtn = new RadioButton();

因此,在您的 switch 语句中,没有输入任何块,因为 radioBtn.Name 将为空,或者 .net 框架分配的某个默认值。

您可能希望检查通过 Visual Studio 图形设计器添加的现有 RadioButton 的值,而不是创建新的 RadioButton。因此,您的代码将如下所示(使用虚构的名称,因为我不知道您在设计器中为您的实际 RadioButtons 命名了什么):

public void button2_Click(object sender, EventArgs e)
{
  if (radioButton1.Checked)
  { 
    ComicBooks CB = new ComicBooks();
    CB.setTitle(textBox1.Text);
    MessageBox.Show(CB.Title);
  }
  else if (radioButton2.Checked)
  { 
    // do something
  }
  else if (radioButton3.Checked)
  { 
    // do something
  }
}

【讨论】:

  • 感谢您的示例。有人告诉我,switch case 语句会比 if 语句更好。看起来你可以去任何一种方式
  • @Justin 开关也适用于此,但此答案中的逻辑适用于您使用的任何控制结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2013-05-13
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多