在我上次编译时,我收到了以下构建错误:
“非静态字段,方法或者需要对象引用 财产......“
然后是我Main()
中包含的所有项目的列表。
之前,它已阅读static Main() {
,但在我将其更改为public Main() {
之前,我无法将错误消失。
我不记得在这个开始发生之前我做过的最后一件事(这是昨晚很晚),但我确实认为我在试图引用主表单上的static void recalcTotals()
字段项目时搞乱了我仍然没有想到它,但这是一个单独的问题。
请注意,这是我的第一个C#程序。下面基本上是我的代码:
namespace Play_XXX
{
public partial class Main : Form
{
// Enable moveability
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
// Handling the window messages
protected override void WndProc(ref Message message) {
base.WndProc(ref message);
if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
message.Result = (IntPtr)HTCAPTION;
}
public Main() {
InitializeComponent();
// Handle all auto-formatting textboxes
txt1.Leave += new EventHandler(validateInput);
txt2.Leave += new EventHandler(validateInput);
txt3.Leave += new EventHandler(validateInput);
txt4.Leave += new EventHandler(validateInput);
txt5.Leave += new EventHandler(validateInput);
txt6.Leave += new EventHandler(validateInput);
txt7.Leave += new EventHandler(validateInput);
txt8.Leave += new EventHandler(validateInput);
txt9.Leave += new EventHandler(validateInput);
txt10.Leave += new EventHandler(validateInput);
txt11.Leave += new EventHandler(validateInput);
}
private void Main_Load(object sender, EventArgs e) {
//TODO: Reference function to clear all input forms
}
static decimal? trueAmount(string testValue) {
decimal preOut;
//TODO: RegEx to remove all except digits?
if (testValue != null && testValue != "")
testValue = testValue.Replace(",", "").Replace("$", "");
else
testValue = "0";
//Return value
if (decimal.TryParse(testValue, out preOut))
return preOut;
else
return null;
}
void validateInput(object sender, EventArgs e) {
TextBox subjBox = (sender as TextBox);
decimal? trueVal = trueAmount(subjBox.Text);
//Check if this is a number
if (trueVal.HasValue) {
subjBox.Text = trueVal.Value.ToString("C");
subjBox.BackColor = Color.FromArgb(86, 86, 86);
subjBox.ForeColor = Color.FromArgb(208, 210, 211);
recalcTotals();
}
else {
subjBox.BackColor = Color.FromArgb(255, 200, 200);
subjBox.ForeColor = Color.Maroon;
}
}
static void recalcTotals() {
//TODO: How the fxck do your reference form controls
}
private void btnClose_Click(object sender, EventArgs e) {
Close();
}
}
}
答案 0 :(得分:1)
将您的课程命名为Main
以外的所有内容(例如MainForm
)。
答案 1 :(得分:0)
请注意,构造函数与方法不同。
方法的名称与类名不同,并且它具有返回类型,例如void
或int
。这些是方法:
class C
{
public void M1()
{
}
public static void M2()
{
}
public int M3()
{
return 10;
}
public static int M4()
{
return -10;
}
}
构造函数必须与类具有相同的名称,并且不能具有返回类型。这些是构造函数:
class C
{
public C()
{
}
static C()
{
}
}
构造函数通常用于在使用类之前设置“state”。
入口点是一种特殊方法,程序中只能有一个。入口点必须是方法,必须为static
且必须命名为Main
。因此,入口点不能是也被称为Main
的类的直接成员。
我不认为在Windows窗体应用程序中使用Form
派生的类中的入口点通常是正常的,但当命名遵循上述内容时,它肯定是可能的。
此外,非静态构造函数或方法可以直接访问该类的所有成员。当像这样引用另一个非静态成员时,与方法/构造函数所属的类相同的实例(称为this
)被隐式用于访问另一个成员。
相反,static
构造函数或方法只能通过显式拥有实例来访问非静态成员,如myInstance.TheNonStaticMember();
中所示。通常,入口点(我所说的static
方法)将创建一个new TheClassName(...)
的实例。