C#中的多个子窗体和父窗体

时间:2014-04-22 16:36:04

标签: c# winforms forms parent-child

我有6种形式(我们只说F1,F2,F2a,F2b,F2c,F2d)

我试图将 F2a - F2d 作为 F2 的孩子,而 F2 parentform是 F1 F1 子表单 F2

我尝试了什么

F1

private void button1_Click(object sender, EventArgs e)
{
     F2 nX = new F2(this);

     this.Visible = false;

     nX.Visible = true;
}

F2

public F2(F1 parentForm)
{
    InitializeComponent();

    this.oF = parentForm;

    F2a nA = new F2a(this); //It give me error as i will describe down there.
}

public F1 oF;

F2a - F2d

    public F2* (F2 parentForm) //Well lets just say * stand for the letter of each Form
    {
        InitializeComponent();

        this.oF = parentForm;
    }
    public F2 oF;

F2 上,它给了我2个错误

1.最佳重载方法匹配' GUI_X.F2a.F2a(System.Windows.Forms.F2)'有一些无效的论点

2.Argument 1:无法转换为' GUI_X.F2'到' System.Windows.Forms.MainMenu'

为什么 F2 不能用于 F2a - F2d ,而工作 F1 F2 ? 我错了什么?我怎么解决这个问题?

我是C#的新手,如果有人能帮助我并尽可能简单地解释,我将不胜感激。

如果这有助于我使用 Windows窗体项目。

提前谢谢。

修改

对不起,我忘了在F2 *中初始化 oF ,感谢@S_I_R回答。 但它仍然无法解决问题

3 个答案:

答案 0 :(得分:2)

请您在F2 *类

中验证this.oF的类型为F2
public F2* (F2 parentForm) 
{
    InitializeComponent();

    this.oF = parentForm;
}
private F2 oF; //Make sure this is F2 not F1 or other

修改

只需在F2类中声明F2a-F2d私有对象,然后在需要时显示它们

public class F2
{
  private F2a f2a;
  private F2b f2b;
  public F1 oF; 
  public F2(F1 parent)
  {
    InitializeComponent();
    this.oF = parent;
    f2a = new F2a(this);
    f2b = new F2b(this);
  }

// Now you call F2a - F2d from any method
public void ShowF2a()
{ 
  f2a.ShowDialog();
}

答案 1 :(得分:0)

您现有的代码应该看起来像gthis:

private void button1_Click(object sender, EventArgs e)
{
     F2 nX = new F2(this);
     nX.Show();
}

..但是再做一次改变,你就会得到你想要的东西:

private void button1_Click(object sender, EventArgs e)
{
     F2 nX = new F2(this);
     nX.ShowDialog();
}

您需要在表单实例上调用Show才能显示它。但是,如果你打电话给ShowModal,在关闭孩子之前,它不会让你回到'父母'。

答案 2 :(得分:0)

您已将表单F2的一部分放入System.Windows.Forms命名空间。不要这样做。将表单的所有部分放在您自己的命名空间(GUI_X)中。检查包含partial class F2的所有文件,并确保命名空间正确。