WinForms从另一个窗体引发事件

本文关键字:事件 窗体 另一个 WinForms | 更新日期: 2023-09-27 18:01:38

我有一个主表单名为:MainForm和一个子表单名为:ChildForm我想填充ChildForm的文本框,在MainForm_ButtonClick中,我想触发ChildForm_ButtonClick事件。

<标题> ChildForm:
public partial class ChildForm :Form
  {
        public delegate void delPassData(TextEdit text);
 private void button1_Click(object sender, EventArgs e)
    {
       string depart = "";
       MainForm mfrm = new MainForm();
       delPassData del = new delPassData(frm.funData);
       del(this.Item_CodeTextEdit);
    }
}
<标题> MainForm:
public partial class MainForm : Form
 {
 public void funData(TextEdit txtForm1)
    { 
        string ss = "";
        ss = txtForm1.Text;
        MessageBox.Show(ss);
    }
  private void NavigationPanelBtns_ButtonClick(object sender, ButtonEventArgs e)
    {
        switch (e.Button.Properties.Caption)
        {
            case "Save":
             // i want to call funData() here but i get an empty messageBox
            break;
        }
    }

}

WinForms从另一个窗体引发事件

子表单

public partial class ChildForm : Form
{
    public ChildForm()
    {
        InitializeComponent();
        MainForm.OnChildTextChanged += MainForm_OnChildTextChanged;
        MainForm.OnButtonClick += MainForm_OnButtonClick;
        bttn1.Visible = false;
    }
    void MainForm_OnButtonClick(object sender, EventArgs e)
    {
        this.bttn1.PerformClick();
    }
    void MainForm_OnChildTextChanged(string value)
    {
        this.textBox1.Text = value;
    }
    private void bttn1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("I am hide. But shows message");
    }
}
public class Bttn : Button
{
    public new void PerformClick()
    {
        this.OnClick(EventArgs.Empty);
    }
}

创建父窗体

public partial class MainForm : Form
{
    public delegate void OnMyTextChanged(string value);
    public delegate void ButtonClicked(object sender, EventArgs e);
    public static event OnMyTextChanged OnChildTextChanged;
    public static event ButtonClicked OnButtonClick;
    ChildForm frm = new ChildForm();
    public MainForm()
    {
        InitializeComponent();
        frm.Show();
    }
    public void button1_Click(object sender, EventArgs e)
    {
        OnChildTextChanged("this is new value");
        OnButtonClick(sender, e);
    }
}

访问另一种形式的文本框:

  1. 将文本框的Modifier属性设置为子形式的public

  2. 在主窗体中,通过子窗体的对象访问文本框。

    ,

    obj.txtBox.Text="MyValue";
    

以另一种形式访问事件:

  1. 设置事件处理功能为public

  2. 通过传递null作为表单对象的参数来调用该函数。

    ,

    obj.MyButton_Click(null, null);