更新C#WindowForms中面板的可见性

时间:2016-02-23 04:05:58

标签: c# .net winforms

表格如下:

Form looks like this.

我想使用组合框显示/隐藏面板。但不幸的是,它并没有像预期的那样发生。请检查代码。

namespace Physics
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    //ComboBox Items are:
    //Distance
    //Time
    //Velocity
    void ControlCreate(object item) 
    {
          switch (item.ToString())
          {
              case "Distance":
                  panel1.Visible = true;   
              break;

              case "Time":
              panel1.Visible = false;
              break;

              case "Velocity":
              panel1.Visible = true;
              break;

              default:
              MessageBox.Show("Default");
              break;
           }
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Form1 f = new Form1();
        f.ControlCreate(comboBox1.SelectedItem);
    }

}
}

我知道会有一个愚蠢的错误。

1 个答案:

答案 0 :(得分:0)

当您ComboBox更改其SelectedIndex时,它将转到此事件处理程序:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    Form1 f = new Form1();
    f.ControlCreate(comboBox1.SelectedItem);
}

因此,你应该处理隐藏/显示你的面板。

不要创建新表单:

Form1 f = new Form1(); //unnecessary

但只需使用当前表单中的信息并相应更改其面板可见性:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){
     switch (comboBox1.SelectedItem.ToString())
      {
          case "Distance":
              panel1.Visible = true;   
          break;

          case "Time":
          panel1.Visible = false;
          break;

          case "Velocity":
          panel1.Visible = true;
          break;

          default:
          MessageBox.Show("Default");
          break;
       }
 }

您将完成这项工作,但您可能还想检查当comboBox的选定索引本身更改时显示/隐藏整个面板的逻辑是否正常。