如何将表单实例传递给另一个表单

时间:2013-01-14 14:54:20

标签: c# forms

我有一个名为form1的表单,其中包含在运行时创建的控件。

当我按下表单上的某个按钮时,另一个名为combat的表单加载被隐藏,form1被隐藏,只有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();
    }
}

3 个答案:

答案 0 :(得分:4)

您需要将父表单存储在字段中,以便可以在构造函数外部访问它。

答案 1 :(得分:2)

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();
    }
}

答案 2 :(得分:1)

通常不建议将父表单的实例传递给子表单。在这种情况下(通常是这样),代码实际上更简单:

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();
}