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