在我的应用程序中,我有一个父表单和一个弹出表单。在弹出窗口中,当我单击button1时,应用程序应该调用一个函数,并且作为函数的结果,标签必须更改其文本。虽然弹出按钮有效,但我有两个父表单;一个标签处于默认状态,另一个标签因弹出单击按钮而更改。我有办法隐藏最初的父表格吗?这是我在弹出窗体中使用的代码:
public Form1 f1 = new Form1();
private void button1_Click(object sender, EventArgs e)
{
f1.referansyaz = true;
f1.Show();
}
因此,当我将变量“referansyaz”更改为true时,我调用表单1中的函数,并且作为此函数的结果,表单1(或父表单)中的标签会发生变化。并且f1.show()打开更新后的表单1。
答案 0 :(得分:0)
创建Form1
的第二个实例不您想要做什么。
修改弹出窗体以接受对原始窗体的引用:
public class PopupForm : Form
{
private Form1 f1;
public PopupForm(Form1 f1)
{
this.f1 = f1;
}
private void button1_Click(object sender, EventArgs e)
{
f1.referansyaz = true;
Close();
}
// rest of form
...
}
在实例化弹出窗体时传递引用:
var popupForm = new PopupForm(this);
popupForm.ShowDialog();
通常情况下,我会在子表单上创建一个公共属性...
public class PopupForm : Form
{
public bool Referansyaz { get; private set; }
private void button1_Click(object sender, EventArgs e)
{
Referansyaz = true;
Close();
}
// rest of form
...
}
...在子(popup)表单关闭后由父级使用:
var popupForm = new PopupForm();
popupForm.ShowDialog();
referansyaz = popupForm.Referansyaz;
这样,更改父表单中字段的名称也不会破坏子表单。
答案 1 :(得分:0)
您可以像这样更改代码并传递一种方法,该方法可以更改父表单上的标签,并将委托更改为第二个表单。我强烈建议不将父表单的实例传递给子表单,因为它会破坏 open-closed principle ...
因此,在您的主要表单中输入:
public partial class Form1 : Form
{
public Action<bool> a; `
public Form1()
{
InitializeComponent();
a = new Action<bool>(newValue => this.referansyaz.Text = newValue.ToString());
}
// some code where you create your Form2
Form2 newForm = new Form2(a);
}
然后以你的第二种形式:
public partial class Form2 : Form
{
Action<bool> a;
public Form2(Action<bool> a)
{
this.a = a;
}
private void button1_Click(object sender, EventArgs e)
{
a(true);
}
}
答案 2 :(得分:-2)
您是否尝试使用以下方法隐藏它:
this.Hide();
这对我有用:
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Form1 f1 = new Form1();
f1.referansyaz = true;
f1.Show();
}