c#.net形式错误'变量',但用作'方法'

时间:2012-08-20 08:33:50

标签: c# windows forms

我对.NET框架中的C#编码比较陌生。我正在使用Visual studio 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;
    }
}

7 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:3)

由于adm_LogOn是类AdminClasses中的方法,因此您应该在其实例上使用它:

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

请注意,我已将变量adm_LogOn重命名为adm,您使用了与方法相同的变量名称。这有效但不是很好的做法,因为它容易混淆并容易出错。

答案 2 :(得分: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);

答案 3 :(得分: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);

答案 4 :(得分: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); 

您确实需要对变量类和方法名称执行某些操作。

答案 5 :(得分:-1)

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

这是问题所在。您正在尝试运行不存在的方法。您正在调用该类中的子方法,还是构造函数(在这种情况下,它已在上面的行中运行)?

答案 6 :(得分:-1)

你可能想写:

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

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