我基本上想要这样做:
VBA.Strings.Split()
我有一个表单,显示添加到订单的商品列表,但当我转到另一个页面并导航回订单表单时,它会调用if (form.isOpen() == true)
form.ShowDialog();
else
form f = new form();
,我相信会重置该表单。有关如何克服这一问题的任何建议吗?
答案 0 :(得分:1)
使用静态属性Application.OpenForms
YourFormType f = Application.OpenForms.OfType<YourFormType>().FirstOrDefault();
if (f != null)
f.ShowDialog();
else
{
using(f = new YourFormType())
{
f.ShowDialog();
}
}
但是我不知道这是否能解决你的问题。您可能最好将表单与其支持数据分开并使用绑定来连接两者。导航回来时,只需将支持数据传递给表单的新副本即可。请查看MVVM等概念以获取更多信息。
答案 1 :(得分:0)
您可以使用Application.OpenForms()
if (Application.OpenForms().OfType(Of form).Any)
Application.OpenForms().OfType(Of form).First.ShowDialog();
else
form f = new form();
答案 2 :(得分:0)
如果您调用ShowDialog(),则无法转到同一应用程序中的其他表单(直到您有多个UI线程)。如果你的意思是Show()而不是ShowDialog我会说你只有一个
Form _form;
在你的班级中添加一些保护代码,就像那样(通用的想法):
void ShowOrCreate()
{
if(_form==null)
{
_form = new MyForm();
_form.Closed += OnMyFormClosed();
_form.Show();
}
else
{
_form.BringToFront();
}
}
void OnMyFormClosed(...)
{
_form = null;
}
很抱歉遗漏了部分和方法签名,我相信可以在MSDN中轻松查看。
答案 3 :(得分:0)
一种单例,假设您需要每个应用程序的给定表单的单个实例:
public MyForm: Form
{
private static MyForm _instance;
public static MyForm Instance
{
get
{
if(_instance == null)
_instance = new MyForm();
return instance;
}
}
}
现在您只需使用MyForm.Instance
即可。请注意,使用此方法,您不希望永远调用MyForm.Instance.Close()
(或者您必须重新创建实例)。使用Show/Hide
(无模式)或ShowDialog/Hide
(模态)。