如何从 Form 类调用方法

本文关键字:调用 方法 Form | 更新日期: 2023-09-27 18:30:43

现在我在一个名为 HelperClass 的类中有这段代码:

class HelperClass : CollegeSystem.GUI
    {
        public void selectStudent()
        {
             MySqlConnection conn; // connection object;
        string connstring = "server=localhost;user Id=root;database=collegesystem;Convert Zero Datetime=True ";
            try
            {
                conn = new MySqlConnection(connstring);
                conn.Open();
                MySqlCommand myCommand = new MySqlCommand("SELECT * FROM person", conn);
                MySqlDataReader myReader;
                myReader = myCommand.ExecuteReader();
                cmbTable.Items.Clear();
                while (myReader.Read())
                {
                    cmbTable.Items.Add(myReader["personID"] + " | " + myReader["firstName"] + " | " + myReader["lastName"] + " | " + myReader["address"] + " | " + myReader["phoneNumber"] + " | " + myReader["postCode"] + " | " + myReader["dateOfBirth"]);
                }
            }
            catch (Exception err)
            {//handle the error with a message
                lblInfo.Text = " Error reading the database.";
                lblInfo.Text += err.Message; ;
            }
            finally
            {
            }

我想从我的表格中调用它,但它不起作用:

 private void fillcomboBox()
 {
     selectStudent();
 }

名称"选择学生"在当前上下文中不存在

我把它放在表格的顶部:

 public partial class GUI : Form, College_System.HelperClass

我错过了什么吗?

附言。为什么cmbTablelblInfo由于其保护级别而无法访问?谢谢。

如何从 Form 类调用方法

此代码有多个问题。

  1. 有一个类和一个实例方法,并且您直接调用该方法。您应该创建类的实例并调用该方法。

  2. 检查类定义和调用是否位于同一命名空间中。如果没有,则应将类定义为内部/公共,并在调用代码页中包含命名空间。

  3. 除非标签是在同一类(帮助程序)中定义的,否则无法访问标签

通常,帮助程序类是独立的类,您可以在其中将数据传递给其方法并获取结果进行处理。例如,您可以尝试以下操作:

class myForm : Form
{
    protected void OnClick()
    {
        try
        {
            var data = Helper.SelectStudent();
            cmbTable.Items.AddRange(data);
        }
        catch (Exception ex)
        {
            lblInfo.Text = " Error reading the database.";
            lblInfo.Text += err.Message; ;
        }
    }
}
class HelperClass
{
    public static List<string> SelectStudent()
    {
        List<string> data = new List<string>();
        MySqlConnection conn; // connection object;
        string connstring = "server=localhost;user Id=root;database=collegesystem;Convert Zero Datetime=True ";
        conn = new MySqlConnection(connstring);
        conn.Open();
        MySqlCommand myCommand = new MySqlCommand("SELECT * FROM person", conn);
        MySqlDataReader myReader;
        myReader = myCommand.ExecuteReader();
        cmbTable.Items.Clear();
        while (myReader.Read())
        {
            data.Add(myReader["personID"] + " | " + myReader["firstName"] + " | " + myReader["lastName"] + " | " + myReader["address"] + " | " + myReader["phoneNumber"] + " | " + myReader["postCode"] + " | " + myReader["dateOfBirth"]);
        }
        return data;
    }
}

默认情况下,该属性是私有的。如果您想在遗传类中使用,您可以选择:公共保护,约束,受保护的内部

在您的情况下,我建议公开

 public class HelperClass : CollegeSystem.GUI

公共分部类 GUI:窗体、College_System.帮助程序类

你不能这么做。您的生产线

public partial class GUI : Form, College_System.HelperClass

应该是

public partial class GUI : Form

然后你可以像

College_System.HelperClass c = new College_System.HelperClass();
c.selectStudent();