我有一个名为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();
}
}
答案 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();
}