从第一个表单调用另一个表单函数

时间:2016-10-28 11:47:05

标签: c# forms winforms

我希望标题足够清晰。让我解释一下:我正在做一个c#Winform App。当我启动应用程序时,我启动了表单1 ,我还有其他表单可以通过单击按钮打开它。

问题是,我有这些表格中的功能(表格2,表格3,表格4 .. )我想从表格1 开始。

目前我的代码

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

     // First Event, when I click in the toolstrip menu, I open the Form2 ("Ligne3")
    private void ligne3ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var Ligne3 = new Ligne3();
        Ligne3.Show();
    }

然后,我在Form2中有组件(文本框,按钮,功能等)

public partial class Ligne3 : Form
{

    public Ligne3()
    {
        InitializeComponent();
    }

    private void Ligne3_Load(object sender, EventArgs e)
    {
        //Some code
    }
    }

    //Function I want to call from the Form1
    public void send_email()
    {
     //Some code
    }

我怎样才能开始我的" send_email()" Form1中的函数(例如在加载事件期间)?

2 个答案:

答案 0 :(得分:0)

在调用show之前,将Form2或任何其他对象/变量的值分配给Linge3对象。在调用send_email()之前send_email()分配所需的值。像下面的东西。

private void ligne3ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        var ligne3 = new Ligne3();
        //define variables/properties in Ligne3 for all values to be passed
        //then assign them with corresponding values
        ligne3.Value1 = objForm2.Value1; 
        ligne3.Value2 = objForm2.Value2; 
        ligne3.Value3 = objForm2.textBox1.Text;
        ligne3.Value3 = objForm2.checkBox1.Value;
        //and so on
        ligne3.send_email();
        ligne3.Show();
    }

答案 1 :(得分:0)

如果您单击Form1上的按钮,则启动并打开表单2,3,4等,并在那些btn_click处理程序中创建new表单2,3,3,4。然后,您将获得对每个表单的引用,因此可以在刚刚创建的实例上调用相应的公共方法。例如

public class Form1
{
    private Form2 subForm2;

   private void OpenForm2_Click(object sender, eventargs e)
   {
       subForm2 = new Form2();
       subForm2.Show()
   }

   private void sendEmailBtn_Click(object sender, EventArgs e)
   {
        subForm2.Send_email();
   }
}

从设计的角度来看,这有很多问题,但我只是用它来表达这个想法。 如果要在Form1实例化之外创建Form2,3,4等实例,那么您需要某种形式的Constructor或属性注入来提供实例引用。