我的问题很简单。我有这个新表格,我只是编码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Resize += new EventHandler(Form1_Resize);
this.WindowState = FormWindowState.Minimized;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
ShowInTaskbar = false;
}
else if (WindowState == FormWindowState.Normal)
{
ShowInTaskbar = true;
}
}
}
我希望此表单开始最小化,并且我希望仅在表单未最小化时才显示任务栏图标。但是当我运行这个时,我会收到一个StackOverflowException
。我认为ShowInTaskbar = false
正在调用resize方法。
答案 0 :(得分:3)
将自动最小化放在“加载”事件中,而不是构造函数。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Resize += new EventHandler(Form1_Resize);
this.Load += new EventHandler(Form1_Load);
}
void Form1_Load(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
ShowInTaskbar = false;
}
else if (WindowState == FormWindowState.Normal)
{
ShowInTaskbar = true;
}
}
}
我不完全确定为什么这会阻止堆栈溢出,但是一旦我发现,我就会更新答案。我在重现问题后对其进行了测试,并确认它有效!
答案 1 :(得分:0)
你是对的。您可以通过在最小化表单后添加事件处理程序来修复此实例。
其他方法(将在任何时候阻止此问题发生)是事件处理程序在事件启动时将其自身从事件中移除,并在它退出之前将其自身重新添加(因此在它退出时不会被调用它会自行调整大小),或者使用在事件处理程序执行时设置为true的bool成员变量,以便它知道忽略它触发的任何事件。