按钮上的隐藏和显示第二个表单单击

时间:2015-06-27 10:46:33

标签: c# winforms visual-studio show-hide

我想用按钮点击显示另一个表单(Form2)。基本上当在Form1中单击按钮时,应该显示另一个表单(Form2),这不应该隐藏Form1,并且应该将按钮文本更改为" Hide Progress"在Form1中。再次单击此按钮时,Form2应隐藏,按钮中的文本应更改为"显示进度"。

以下是我努力完成这项工作。当我单击“显示进度”按钮时,它会带来Form2并更改按钮中的文本。但是当我再次单击该按钮而不是隐藏Form2时,它会打开另一个Form2实例。

可能背后的原因是,未保存bool值。

这是我的按钮事件处理程序代码。

public partial class Main : Form
    {
       public string output_green, output_grey, output_blue, output_black;
       public bool visible;
 private void button1_Click(object sender, EventArgs e)
        {

            output progressWindow = new output();

            if (visible == false)
            {
                progressWindow.Show();
                button1.Text = "Hide Progress";
                visible = true;
            }

            else
            {
                progressWindow.Show();
                button1.Text = "Show Progress";
                visible = false;

            }

        }
}

我如何实现我需要的目标。

3 个答案:

答案 0 :(得分:0)

<强>问题:

每次点击button1 进度窗口已初始化。

此外,您在其他部分使用progressWindow.Show()而不是Hide()

<强>解决方案:

progressWindow中声明button1_Click。然后从button1_Click初始化它。现在它只会被初始化一次(使用if)。

output progressWindow = null;
private void button1_Click(object sender, EventArgs e)
{            
        if(progressWindow == null)
            progressWindow = new output();
        if (button1.Text == "Show Progress")
        {
            progressWindow.Show();
            button1.Text = "Hide Progress";
        }
        else
        {
            progressWindow.Hide();
            button1.Text = "Show Progress";
        }
    }
}

答案 1 :(得分:0)

对于较短的解决方案,其中进度窗口的生命周期仍然存在于主窗体中:

    output progressWindow = new output();
    private void button1_Click(object sender, EventArgs e)
    {
        progressWindow.Visible = !progressWindow.Visible;
        button1.Text = (progressWindow.Visible) ? "Hide Progress" : "Show Progress";
    }

这里你不需要额外的布尔值,因为进度表本身完全能够告诉你它是否可见。

答案 2 :(得分:0)

  // Creates a single instance only it it is request.
  private Output ProgressWindow
    {
      get 
          {
              return progressWindow?? (progressWindow= new Output(){Visible = false};
          }
    }

   private Output progressWindow;

    private void button1_Click(object sender, EventArgs e)
    {            
         ProgressWindow.Visible = !ProgressWindow.Visible;
         button1.Text = (ProgressWindow.Visible) ? "Hide Progress" : "Show Progress";

        }
    }