我有一个可以多次打开的Form1,每个都有不同的连续剧。所以说:
Form1 - Serial 100
Form1 - Serial 110
Form1 - Serial 120
serial是Form1上的public int变量。程序应该能够多次打开相同的表单,只要它不是同一个序列。所以我需要程序来检测Form1 - Serial 100何时已经打开,以免两次打开相同的表单。
我在Form1上有这段代码
public string GetSerial
{
get
{
return databaseviewserial;
}
}
我在启动Form1的表单上有这个:
Form1 s = (Form1)Application.OpenForms["Form1"];
if (s != null && s.GetSerial == record)
{
s.BringToFront();
s.WindowState = FormWindowState.Maximized;
}
else
{
Form1 type = new Form1(record, "PendingForm");
type.FormClosed += new FormClosedEventHandler(inhouse_FormClosed);
type.Show();
}
这将成功检查Form1与Serial 100是否打开,并在用户尝试重新打开相同的表单时最大化,但是只要我有两个不同序列打开的Form1,它就不再有效并且将打开Form1而不会检查表格系列。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
由于您使用单个打开表单进行验证,系统不会检查第二种形式。
Form1 s =(Form1)Application.OpenForms [" Form1"];
Insead of this,采取开放表格的集合并执行上面的代码
FormCollection fc=Application.OpenForms;
foreach(Form f in fc)
{
// ur Form1 testing code goes here...
}
答案 1 :(得分:0)
为了更容易,首先编写一个函数,找到一个带有指定序列的打开表单,如下所示:
static Form1 FindMyForm(string serial)
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
var myForm = Application.OpenForms[i] as Form1;
if (myForm != null && myForm.GetSerial == serial) return myForm;
}
return null;
}
然后你的代码就像这样:
var myForm = FindMyForm(record);
if (myForms != null)
{
myForm.BringToFront();
myForm.WindowState = FormWindowState.Maximized;
}
else
{
myForm = new Form1(record, "PendingForm");
myForm.FormClosed += new FormClosedEventHandler(inhouse_FormClosed);
myForm.Show();
}