我想用按钮点击显示另一个表单(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;
}
}
}
我如何实现我需要的目标。
答案 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";
}
}