两种形式之间的关系

时间:2011-02-02 03:24:19

标签: c# winforms forms checkbox

打开表格的方法:

  

form1 - > form2 - > form3

form1上的ChecklistBox。如何知道form3是否有效?

3 个答案:

答案 0 :(得分:1)

如果您引用的表单是MDI child forms,则可以使用

Form activeChild = this.ActiveMdiChild;

如果不使用MDI子表单,则可以使用以下代码。

Form currentForm = Form.ActiveForm;

答案 1 :(得分:0)

我知道您在询问是否打开了表单3。如果这不正确,请赐教。

可能有很多方法可以做到,这完全取决于你想做什么。

一种简单的方法是在某个地方留一个标志,比如在Program.cs文件中:

public static bool Form3IsOpen = false;

然后:

private void Form3_Load(sender object, EventArgs e)
{
    Program.Form3IsOpen = true;
}

private void Form3_Close(sender object, EventArgs e)
{
    Program.Form3IsOpen = false;
}

补充:

您还可以保留对子表单的引用:

在form1.cs中:

private Form2 FormChild;

//In the function that opens the Form2:
FormChild = new Form2();
FormChild.Show();

Form2将有类似的东西保留Form3。如果一个表单可以打开几个,只需使用数组或集合。

答案 2 :(得分:0)

当我通常有许多不同的形式并且只创建一个实例时,我将它们放入dictonary并检查是否有表格。

这样的事情:

 public static Dictonary<string, Form> act_forms_in_app = new Dictonary<string, Form>();

现在在每个表单创建中我都这样做

Form1 frm = new Form1();
frm.Name = "Myformname"
//set its properties etc.
frm.Load => (s,ev) { act_forms_in_app.Add(frm.Name, frm);};
frm.Load += new EventHandler(frm_Load);
frm.Disposed => (s, ev) { act_forms_in_app.Remove(frm.Name)};

//your usual form load event handler
public void frm_Load(object sender, EventArguments e)
{
    ...
}

您要检查的地方

Form frm = //Your form object
if(act_forms_in_app.ContainsKey(frm.Name))
{
     //Perform as required
}