如何将一个窗体的实例传递到另一种形式(How to pass an instance of a fo

2019-07-18 04:37发布

我有一个名为形式form1与它们在运行时创建的控件。

当我按表单上的按钮另一个名为窗体加载combatform1被隐藏起来,只有1表格( combat )是可见的。

当我按下一个按钮, combat我希望我的form1形成的显示。 但是我不能访问它。

以下是我已经试过:

 private void combatBtn_Click(object sender, EventArgs e)
    {
        Form combat = new Combat(this);
        this.Hide();
        combat.Show();

    }

public partial class Combat : Form
 {

    public Combat(Form form)
    {
        InitializeComponent();
        form.Show();


    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Show();
    }
}

Answer 1:

public partial class Combat : Form
{

    private form1 form;    // Or whatever class you form1 is supposed to be

    public Combat(Form form)
    {
        InitializeComponent();
        this.form = form;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Show();
    }
}


Answer 2:

您需要将父窗体存储在一个领域,这样就可以在构造函数外访问它。



Answer 3:

它一般不建议在父窗体的实例传递给孩子。 在这种情况下(如经常如此)的代码实际上比较简单,当你不知道:

private void combatBtn_Click(object sender, EventArgs e)
{
    Form combat = new Combat();
    this.Hide();
    combat.ShowDialog();
    this.Show();
}

如果你需要显示父窗体关闭子窗体之前,那么你可以通过各种活动做到:

Combat添加:

public event Action MyEvent; //TODO rename to a meaningful name

火在按钮单击处理事件:

private void button1_Click(object sender, EventArgs e)
{
    MyEvent();
}

再有你的主要形式的处理程序添加到事件:

private void combatBtn_Click(object sender, EventArgs e)
{
    Combat combat = new Combat();
    this.Hide();
    combat.MyEvent += () => this.Show();
    combat.Show();
}


文章来源: How to pass an instance of a form to another form
标签: c# forms