0

我对 .NET 框架中的 C# 编码比较陌生。我正在使用 Visual Studios 10。我觉得这是一个简单的问题,但是无论我尝试使用可见性,它都行不通。这是错误最少的“尝试”。我想将这些类与 Windows 应用程序表单代码分开。也许这就是为什么它不能正常工作的原因,因为当我第一次运行一个(凌乱的)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是类中的一个方法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 的一个函数

第二行应该是

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

你真的需要对你的变量类和方法名做点什么。

于 2012-08-20T08:42:53.727 回答
-1
       this.admTicket = adm_LogOn(userName.Text, passWord.Text);

这是问题线。您正在尝试运行一个不存在的方法。您正在调用的那个类中是否有一个子方法,或者它是一个构造函数(在这种情况下,它已在上面的行中运行)?

于 2012-08-20T08:36:59.143 回答
-1

你可能想写:

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

小心复制/粘贴。问题可能是由它引起的。

于 2012-08-20T08:38:51.237 回答