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

标签 c# mysql winforms

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

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

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

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

    public Form1()
    {
        InitializeComponent();

        functionMySQLCheckLogin = CheckLogin;
    }

但是,大概出现这种情况的原因是因为您想重用代码。如果是这样,我会考虑重构并将 CheckLogin 代码移动到更合适的类,例如一个通用的帮助程序、数据访问,甚至是一个基本表单类(如果它要被多个表单使用)。

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

最后一件事 - 请查看 parameterizing就目前的 sql 查询而言,它容易受到 sql 注入(inject)攻击,登录屏幕是最喜欢的目标。

关于c# - 在将字符串从一种形式传递到另一种形式时调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22422782/

相关文章:

c# - ASPxGridView——如何简单地添加仅具有 DataSource 属性的示例值?

c# - 将空格字符模型绑定(bind)到 char 属性

mysql - 为数据库 Ruby on Rails 配置项目

python - 无法使用 python Pymysql 更新 SQL 数据库

c# - GetChanges() 或 RowState 获取数据表的所有更改?

c# - 连接字符串时使用char[]和StringBuilder和string没有区别

php - 将 mysql 行结果作为表格式存储在 php 变量中

c# - 将连接字符串从 app.config 移动到 C# 中的代码

c# - 适当的形式应用程序设计

c# - facebook open graph API 名称和命名空间属性