gpt4 book ai didi

c# - 检查表单是否打开,如果打开则更新

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:32 26 4
gpt4 key购买 nike

我想检查是否打开了一个表单实例并打开现有实例以更新文本框,否则创建一个新实例。

搜索后我发现:How to check if a windows form is already open, and close it if it is?

来 self 尝试过的接受的答案

try
{
foreach (Form fm in Application.OpenForms)
{
if (fm is Form2)
{
Form2 n1 = (Form2)Application.OpenForms["Form2"];
n1.textBox1.Text = textBox1.Text;
break;
}
else
{
Form2 n1 = new Form2();
n1.textBox1.Text = textBox1.Text;
n1.Show();
}
}
}
catch (InvalidOperationException)
{
}

除此代码抛出 InvalidOperationException(我已经捕获)之外,该代码不起作用,因为如果实例已存在,它仍会创建一个新实例。

我做错了什么?

最佳答案

更好的方法是根据表单类型过滤 OpenForms:

var form2collection = Application.OpenForms.OfType<Form2>();

然后您可以遍历这些,或者如果集合为空,则打开一个新表单。优点是您不依赖表单名称,而是表单的实际类定义,这样更可靠。

此外,我倾向于避免从其他代码直接操作控件。我觉得别人调用一个方法更靠谱,比如

public void setSomeControl(string value)
{
this.controlName.Text = value;
}

然后调用

form2collection[0].setSomeControl("new value");

它允许您的表单执行所有内务处理,调用代码可以忽略这些细节。

关于c# - 检查表单是否打开,如果打开则更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com