2

我有一个form1在运行时创建的带有控件的表单。

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

3 回答 3

4

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

于 2013-01-14T14:55:18.143 回答
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();
    }
}
于 2013-01-14T14:58:17.637 回答
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();
}
于 2013-01-14T15:25:40.960 回答