开关盒与单选按钮 - C#

问题描述:

我想开发一个开关case语句,允许我运行代码的依赖我选择了3个单选按钮。我有一个消息框语句来告诉我,这是成功的,但它从来没有显示,所以我敢肯定,我做错了什么开关盒与单选按钮 - C#

任何意见将是巨大的

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; 

      } 

     } 
+2

'单选radioBtn =(单选)发件人;' –

+4

你正在创建一个没有名字的新RadioButton,所以当然它什么也不做。 – Pikoh

+1

不是@JohnnyMopp。这似乎是一个按钮单击事件,所以你不能将发件人投给RadioButton – Pikoh

与您的代码的问题是要创建的RadioButton这里的新实例:

RadioButton radioBtn = new RadioButton(); 

此实例无法连接到任何东西在你的UI,并且没有Name属性设置好的,所以它不匹配任何switch情况。

如果要检查什么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部分

+0

'var name = this.panel1.Controls.OfType ().FirstOrDefault(x => x.Checked)?. Name;'会更习惯。 –

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

RadioButton radioBtn = new RadioButton(); 

所以,在你的switch语句,没有你的块被进入,因为radioBtn.Name将是零,或者由.NET Framework分配一些默认值。

您可能想要检查通过Visual Studio图形设计器添加的现有RadioButton的值,而不是创建新的RadioButton。所以,你的代码看起来像下面(用虚构的名字,因为我不知道你叫在设计你的实际单选按钮都):

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 
    } 
} 
+0

感谢这个例子。我被告知,switch case case语句会更好,而不是if语句。看起来像你可以去任何方式 – Justin

+0

@Justin开关也很好,但这个答案中的逻辑适用于你使用的任何控制结构。 –

+0

@AluanHaddad,感谢您的信息! – Justin