从子表单调用函数后重复的父表单

时间:2015-07-23 11:56:37

标签: c# forms parent-child

在我的应用程序中,我有一个父表单和一个弹出表单。在弹出窗口中,当我单击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。

3 个答案:

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