Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击按钮隐藏并显示第二个窗体_C#_Winforms_Visual Studio_Show Hide - Fatal编程技术网

C# 单击按钮隐藏并显示第二个窗体

C# 单击按钮隐藏并显示第二个窗体,c#,winforms,visual-studio,show-hide,C#,Winforms,Visual Studio,Show Hide,我想通过单击按钮显示另一个表单(Form2)。基本上,当在Form1中单击按钮时,应显示另一个表单(Form2),这不应隐藏Form1,而应将Form1中的按钮文本更改为“隐藏进度”。再次单击此按钮时,Form2应隐藏,按钮中的文本应更改为“显示进度” 下面是我努力使这项工作。当我单击ShowProgress按钮时,它会显示Form2并更改按钮中的文本。但是当我再次单击按钮而不是隐藏Form2时,它会打开Form2的另一个实例 背后的原因可能是bool值未保存 下面是我的按钮事件处理程序代码 p

我想通过单击按钮显示另一个表单(Form2)。基本上,当在Form1中单击按钮时,应显示另一个表单(Form2),这不应隐藏Form1,而应将Form1中的按钮文本更改为“隐藏进度”。再次单击此按钮时,Form2应隐藏,按钮中的文本应更改为“显示进度”

下面是我努力使这项工作。当我单击ShowProgress按钮时,它会显示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;

            }

        }
}

我怎样才能实现我需要的。

问题:

每次单击
按钮1
anewprogressWindow时,都已初始化

另外,您正在使用
progressWindow.Show()
而不是else部分中的
Hide()

解决方案:

声明
progressWindow
退出
按钮1\u单击
。然后从
按钮1\u单击
初始化它。现在它将只初始化一次(使用
if


对于进度窗口的生命周期与主窗体保持一致的较短解决方案:

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

在这里,您不再需要额外的布尔值,因为进度表单本身完全可以告诉您它是否可见。

@Ranging Bull,它仍然不会隐藏Form2是的,您的解决方案仅初始化Form2一次,但当按下按钮时,Form2不会隐藏clicked@AmritSharma:您正在else部分中使用
progressWindow.Show()
。这就是问题所在。现在我更新了我的答案。现在试试。它很好用,现在我错了。谢谢拉金,我真的不喜欢上次的编辑。您现在正在使用按钮的
文本
属性作为信息存储-这绝不是一个好主意。一种财产,一种目的。额外的布尔值不是必需的,但它比将信息存储在不属于它的地方更好。
  // 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";

        }
    }
  // 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";

        }
    }