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。保護レベルが原因でcmbTableとにアクセスできないのはなぜですか? lblInfoありがとうございました。

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

デフォルトでは、属性は非公開です。継承されたクラスで使用したい場合は、選択できます:public protected、conteneur、protectedinternal

あなたの場合、私は公開をお勧めします

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