我有一个倒数计时器表格 - 在第一个表格上,用户将输入倒计时时间 - 警告时间,结束消息等。还有两个单选按钮(最大/最小),根据选择哪个,它们将打开一个新的Max或Min形式,其中时间实际上将开始倒计时。它正常工作并按照我的预期倒计时。但是,如果我退出Max或Min形式并尝试再次运行新的时间,我会收到错误。代码如下 - 注意注释掉.ShowDialog(this);是我试过的东西 - 它让我关闭并打开新表格确定但它实际上并没有开始倒计时。 UpdateLabels是更新标签的功能。
bool Max = rbMax.Checked;
if (Max == true)
{
//_Max.ShowDialog(this);
_Max.Show();
}
else
//_Min.ShowDialog(this);
_Min.Show();
UpdateLabels();
}
我还尝试了以下在线阅读作为可能的解决方案,但它也没有用....
private void Max_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
this.Parent = null;
}
任何人都可以帮助我 - 如果需要,我可以发布UpdateLabels功能。我对UI C#开发很陌生,所以任何帮助都会很棒。感谢。
答案 0 :(得分:4)
问题是,关闭的表格不能再使用(重新开放)。这就是为什么你发布的代码试图停止关闭,只隐藏你的窗口。但为此,必须将Cancel-property设置为true:
private void Max_FormClosing(object sender, FormClosingEventArgs e) {
this.Hide();
this.Parent = null;
e.Cancel=true;
}
要以这种方式关闭后显示表单,请使用Show()方法显示它。
然而,这可能只是一种解决方法,您可以使用其他设计解决问题。 也许明智的做法是,每次需要时创建表单的新实例,而不是每次都尝试重新打开它。这样做的另一个好处是,如果确实需要,表单只会请求资源。
答案 1 :(得分:4)
您可以做的是在调用.Show方法之前添加以下检查:
if(_Max == null || _Max.IsDisposed)
_Max = new MaxForm();
_Max.Show();
和_Min表格类似
答案 2 :(得分:1)
每当表单关闭时,释放所有资源。这意味着您不能再访问该对象,因为它不再存在 - 它已被释放并从内存中删除。为了防止这种情况发生,您可以取消关闭表单,然后隐藏它(这对用户来说是透明的)。
this.Hide();
e.Cancel=true;
您的代码的更新版本如下:
private void Max_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
this.Parent = null;
}
答案 3 :(得分:0)
解决方案很简单,例如在按钮点击事件中实例化被调用表单的对象。
private void buttonSetting_Click( object sender, EventArgs e )
{
***_setting = new SettingWindow();*** //When I need to show the settings window
_setting.Show();
}
答案 4 :(得分:0)
如果对象不可用,则创建新的状态
if(frmRGB == nullptr || frmRGB.IsDisposed == true) { frmRGB = new Form(); }
答案 5 :(得分:-1)
在按钮单击事件内创建对象 像这样
private void btn_supplier_order_Click(object sender, EventArgs e)
{
form_supplier_order so = new form_supplier_order();
so.Show();
}