如何从另一个窗体调用函数

本文关键字:调用 函数 窗体 另一个 | 更新日期: 2023-09-27 17:50:05

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

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);
   }
}

请帮忙!

如何从另一个窗体调用函数

如果您传递MySqlConnect所需的参数,那么您的第一个示例就可以工作。

public partial class Form2 : Form
{
   Form1 mainForm;
   public Form2(Form1 mainForm)
   {
       InitializeComponent();
       this.mainForm = mainForm;
       mainForm.MySQLConnect(this, new EventArgs());
   }
}

然而,我无法想象一个名为MySqlConnect的函数能用传递的参数做什么
因此,最好在方法定义中删除它们,并且在调用它时不要传递任何信息

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

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

有什么想法吗?你只是忽略了论点。