如何从另一个表单调用函数

时间:2014-03-13 23:35:22

标签: c# winforms methods

这可能是最常见的问题之一,有一个FORM1和FORM2,我如何调用一个函数(在FORM1上),如: MySQLConnect 来自FORM2 。我尝试了几个选项,我无法让它工作,在第二次尝试中,我尝试从按钮调用该功能,但没有运气。

Form1.cs(我的第一次尝试:

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

       Form2 form2 = new Form2(this);
   }

   public void MySQLConnect(object sender, EventArgs e)
   {
       // Starting a MySQL connection
   }
}

Form2.cs(我的第一次尝试:

public partial class Form2 : Form
{
   Form1 mainForm;

   public Form2(Form1 mainForm)
   {
       InitializeComponent();

       this.mainForm = mainForm;
       // call function on form1 MySQLConnect()
       mainForm.MySQLConnect();
   }
}

Form1.cs(我的第二次尝试:

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

   public void MySQLConnect(object sender, EventArgs e)
   {
       // Starting a MySQL connection
   }
}

Form2.cs(我的第二次尝试:

public partial class Form2 : Form
{


   public Form2()
   {
       InitializeComponent();
   }

   private void btnMySQLConnect(object sender, EventArgs e)
   {

      Form1 myForm1 = new Form1();
      myForm1.MySQLConnect(sender, e);
   }

}

请帮忙!

2 个答案:

答案 0 :(得分:3)

如果传递MySqlConnect预期的参数,则第一个示例有效。

public partial class Form2 : Form
{
   Form1 mainForm;

   public Form2(Form1 mainForm)
   {
       InitializeComponent();

       this.mainForm = mainForm;
       mainForm.MySQLConnect(this, new EventArgs());
   }
}

但是,我无法想象名为MySqlConnect的函数可以对传递的参数做什么 因此最好在方法定义中删除它们,并在调用它时不要传递任何内容。

我同意上述评论。为什么要在Form实例中隐藏这些重要的(通常需要的功能)?您必须在需要连接到数据库的任何位置传递此表单实例。最好准备一些执行此工作的静态服务类(在数据库访问层中)

答案 1 :(得分:0)

mainForm.MySQLConnect();
public void MySQLConnect(object sender, EventArgs e)

有什么想法吗?你刚才省略了参数。