C# 在将字符串从一种形式传递到另一种形式时调用函数

C# 在将字符串从一种形式传递到另一种形式时调用函数,c#,mysql,winforms,C#,Mysql,Winforms,我需要帮助来调用函数,同时在单击按钮时将字符串从一个窗体传递到另一个窗体 Form1(Form1)具有验证登录所需的MySQL连接和“Select”语句 Form2(LoginWindow)具有登录用户和密码文本框以及登录按钮 我得到的错误是:“无法将类型'void'隐式转换为'Application.Main.App.Form1.MyFunctionExposed'” 以下是我所拥有的: Form1.cs: namespace Application.Main { public par

我需要帮助来调用函数,同时在单击按钮时将字符串从一个窗体传递到另一个窗体

Form1(Form1)具有验证登录所需的MySQL连接和“Select”语句

Form2(LoginWindow)具有登录用户和密码文本框以及登录按钮

我得到的错误是:“无法将类型'void'隐式转换为'Application.Main.App.Form1.MyFunctionExposed'”

以下是我所拥有的:

Form1.cs:

namespace Application.Main
{


  public partial class Form1 : Form 
  {
    public string strUser;
    public string strPass;

    public delegate void MyFunctionExposed();
    public static MyFunctionExposed functionMySQLCheckLogin;


    public Form1()
    {
        InitializeComponent();


        functionMySQLCheckLogin = CheckLogin(strUser, strPass);

    }




   //Check Login
   public void CheckLogin(string strUser, string strPass)
   {
       try
       {
           //Open connection
           string query = "SELECT * FROM users WHERE user_name = '" + strUser + "' AND user_password = '" + strPass + "' ";
           //Create Command
           MySqlCommand cmd = new MySqlCommand(query, connection);
           //Create a data reader and Execute the command and the rest of the MySQL query code


       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.Message);
       }
   }
  }
}
Form2.cs

namespace Application
{
public partial class LoginWindow : Form
    {

         public LoginWindow()
        {
           InitializeComponent();
        }

        private void LoginWindow_Load(object sender, EventArgs e)
        {

        }


        private void btnLoginGo_Click(object sender, EventArgs e)
        {
            Application.Main.Form1.functionMySQLCheckLogin(inputBoxLoginUser.Text, inputBoxLoginPassword.Text);
        }
 }
有没有办法解决这个问题,或者用这两种形式做不同的事情?
谢谢。

要编译此文件,您只需获得正确的参数-将
(string,string)
签名添加到委托中,静态的赋值将分配给方法组(即不调用函数):

然而,可能出现这种情况的原因是您希望重用代码。如果是这样的话,我会考虑重构,并将<代码>检查登录> /代码>代码移到一个更合适的类,例如公共助手、数据访问,甚至是一个基本窗体类(如果要被多个表单使用)。 另一种选择是将
CheckLogin
方法设置为静态(因为它不依赖于
Form1
字段的状态)-这样,您可以从任何地方调用它,称为
Form1.CheckLogin(…,…)

最后一件事-请查看sql查询的现状,它容易受到sql注入攻击,登录屏幕是最受欢迎的目标

    public delegate void MyFunctionExposed(string user, string pass);
    public static MyFunctionExposed functionMySQLCheckLogin;

    public Form1()
    {
        InitializeComponent();

        functionMySQLCheckLogin = CheckLogin;
    }