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

本文关键字:另一种 函数 调用 一种 字符串 | 更新日期: 2023-09-27 17:50:19

我需要帮助调用一个函数,而传递字符串从一个形式到另一个时,点击一个按钮。

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)签名添加到委托中,并将静态分配给方法组(即不调用函数):

    public delegate void MyFunctionExposed(string user, string pass);
    public static MyFunctionExposed functionMySQLCheckLogin;
    public Form1()
    {
        InitializeComponent();
        functionMySQLCheckLogin = CheckLogin;
    }

然而,出现这种情况的原因可能是因为您希望重用代码。如果是这样,我会考虑重构并将CheckLogin代码移动到一个更合适的类,例如,一个通用的助手,数据访问,甚至一个基本的表单类(如果它是由多个表单使用)。

另一种选择是使CheckLogin方法静态(因为它不依赖于Form1字段的状态)-这样你就可以从任何地方调用它作为Form1.CheckLogin(.., ..)

最后一件事-请查看参数化sql查询,因为它很容易受到sql注入攻击,登录屏幕是最喜欢的目标。