我对.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;
}
}
答案 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);
小心复制/粘贴。问题可能是由它造成的。