0

.NET FrameworkでのC#コーディングは比較的初めてです。Visual Studios 10を使用しています。これは単純な問題のように感じますが、視認性を試してみても機能しません。これは、エラーが最も少ない「試行」です。クラスを分割して、Windowsアプリケーションのフォームコードから分離したかったのです。たぶんそれが正しく機能していない理由です。最初にすべてを1つの(厄介な)Windowsアプリフォームコードで試したとき、機能しました。今ではそれをきちんとしたパッケージに分割します。コードを見て、私が見落としているものを教えてください。もちろん、グーグルだけでなく質問も検索しましたが、問題は、ほとんどの場合、このエラーが配列に関係していることです。私にとってはそうではありません。

エラーは次のとおりです。

「adm_LogOn」は「変数」ですが、「メソッド」のように使用されます。DemoTestEditor\ DemoTestEditor \ Form1.cs

  private void buttonAdmLogOn_Click(object sender, EventArgs e)
    {
        //  The console commands (above and below Writes to the Output. 
        //  Messagebox also works but I think it's too "in your face"

        Console.WriteLine("Admin Log On Button pressed.");

        AdminClasses adm_LogOn = new AdminClasses(); // Creates a new object instance myALogOn

        this.admTicket = adm_LogOn(userName.Text, passWord.Text);
        if (this.admTicket != null)
        {
            Console.WriteLine("Got Ticket: " + this.admTicket);
            this.buttonAdmLogOn.Enabled = true;
            this.buttonAdmLogOff.Enabled = false;
        }
    }

そして、これは別のAdmin.classes.csコード内で呼び出しているクラスです。

    public string adm_LogOn(string username, string password)
    {
        // Initialize a (new object) adm service to work with.
        SmartConnectionAdmin.SmartConnectionAdminService adm = new SmartConnectionAdmin.SmartConnectionAdminService();

        // Setting up the arguments for the webservice (LogOnRequest) parameters
        string ticket = null;
        string server = null;
        string clientName = "C# Client Suus";
        string domain = null;
        string clientAppName = "C# Tester Suus";
        string clientAppVersion = null;
        string clientAppSerial = null;
        string clientAppCode = null;

        try
        {
            // Place call with the above arguments
            adm.LogOn(username, password, ref ticket, server, clientName, domain, clientAppName, clientAppVersion, clientAppSerial, clientAppCode);

            // Displays the retrieved ticket
            Console.WriteLine("The following ticket has been received: {0}", ticket);

        }
        catch (Exception e)
        {
            MessageBox.Show("Error: " + e.Message, "Oops!", MessageBoxButtons.OK, MessageBoxIcon.Error);

        } 

        Console.WriteLine("UserName checked.");

        return ticket;
    }
}
4

7 に答える 7

4

public string adm_LogOn(string username, string password)はクラス定義ではなく、(クラス内の) メソッドです。周囲のオブジェクトが存在しない場合は作成する必要があります。その後、そのクラスのインスタンスからこのメソッドを呼び出すことができます。

このメソッドが現在使用しているクラス内にある場合は、メソッドを呼び出すだけです。つまり、次の行を削除できます。

AdminClasses adm_LogOn = new AdminClasses(); 

あなたがする必要があるのは、これを次のように変更することです:

AdminClasses admClass = new AdminClasses(); // Creates a new object instance myALogOn 

this.admTicket = admClass.adm_LogOn(userName.Text, passWord.Text); 
于 2012-08-20T08:36:13.790 に答える
3

adm_LogOnは class のメソッドであるため、AdminClassesそのインスタンスで使用する必要があります。

AdminClasses adm = new AdminClasses(); 
this.admTicket = adm.adm_LogOn(userName.Text, passWord.Text);

変数の名前を に変更したことに注意してください。メソッドと同じ変数名を使用していますadm_LogOnadmそれは機能しますが、混乱を招き、エラーが発生しやすいため、良い習慣ではありません。

于 2012-08-20T08:38:08.790 に答える
1

ここでこのエラーが発生しています

AdminClasses adm_LogOn = new AdminClasses(); // Creates a new object instance myALogOn

this.admTicket = adm_LogOn(userName.Text, passWord.Text);

adm_LogOnオブジェクトインスタンス(変数)ですが、メソッドのように呼び出しているためです。

クラス内のオブジェクト名とメソッドは異なる方が望ましい。

AdminClasses adm = new AdminClasses(); // Creates a new object instance myALogOn

this.admTicket = adm.adm_LogOn(userName.Text, passWord.Text);
于 2012-08-20T08:37:36.717 に答える
1
AdminClasses adm_LogOn = new AdminClasses(); // Creates a new object instance myALogOn 
this.admTicket = adm_LogOn(userName.Text, passWord.Text);

ここが問題です。AdminClassesクラスにはadm_LogOnメソッドが含まれています。次のように呼び出す必要があります。

this.admTicket = adm_LogOn.adm_LogOn(userName.Text, passWord.Text);

物事をより明確にするために:

AdminClasses adm = new AdminClasses(); // Creates a new object instance myALogOn 
this.admTicket = adm.adm_LogOn(userName.Text, passWord.Text);
于 2012-08-20T08:38:34.893 に答える
1
AdminClasses adm_LogOn = new AdminClasses();
myALogOn   this.admTicket = adm_LogOn(userName.Text, passWord.Text); 

adm_logon が AdminClasses の関数であると仮定する

2行目は

this.admTicket = adm_logon.adm_LogOn(userName.Text, passWord.Text); 

変数のクラス名とメソッド名をどうにかする必要があります。

于 2012-08-20T08:42:53.727 に答える
-1

あなたは書きたいかもしれません:

AdminClasses adm = new AdminClasses(); 
this.admTicket = adm.LogOn(userName.Text, passWord.Text);

コピー&ペーストには注意してください。問題はそれによって引き起こされた可能性があります。

于 2012-08-20T08:38:51.237 に答える
-1
       this.admTicket = adm_LogOn(userName.Text, passWord.Text);

これが問題の行です。存在しないメソッドを実行しようとしています。呼び出しているクラスにサブメソッドはありますか、それともコンストラクターですか (この場合、上記の行で実行されています)。

于 2012-08-20T08:36:59.143 に答える