1

现在我在一个名为 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();
 }

当前上下文中不存在名称“selectStudent”

我把它放在表格的顶部:

 public partial class GUI : Form, College_System.HelperClass

我错过了什么吗?

PS。为什么cmbTablelblInfo由于它的保护级别而无法访问?谢谢你。

4

3 回答 3

1

您对此代码有多个问题。

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

  2. 检查类定义和调用是否在同一个命名空间中。如果不是,您应该将类​​定义为 internal/public 并在调用代码页中包含命名空间。

  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;
    }
}
于 2013-09-10T09:42:03.650 回答
1

公共部分类 GUI:Form、College_System.HelperClass

你不能这样做。你的线

public partial class GUI : Form, College_System.HelperClass

应该

public partial class GUI : Form

然后你可以打电话

College_System.HelperClass c = new College_System.HelperClass();
c.selectStudent();
于 2013-09-10T09:40:47.480 回答
1

默认情况下,该属性是私有的。如果您想在继承的类中使用,您可以选择:public protected、conteneur、protectedinternal

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

 public class HelperClass : CollegeSystem.GUI
于 2013-09-10T09:37:09.720 回答