In a previous question我詢問了標題錯誤消息,答案几乎是非常明顯的。「非靜態字段需要對象引用」重新訪問
然而,這個「蒸發」的例子來自一些不太稀釋的代碼,現在原來的問題再次出現在我的新肉湯中。
我懷疑我可能要開自己交給了很多「有趣」的評論,但哎...有沒有這樣的事情愚蠢的問題,只有愚蠢的程序員!」
不管怎麼說,這只是一個輕微原代碼的水煮版本:
public partial class Form1 : Form
{
public static Form1 mForm = new Form1();
// define textbox parameter structure
struct ParmStruct
{
public TextBox sTextBoxName;
public double dMinValue;
public double dMaxValue;
public ParmStruct(TextBox sTextBoxName, double dMinValue, double dMaxValue)
{
this.sTextBoxName = sTextBoxName;
this.dMinValue = dMinValue;
this.dMaxValue = dMaxValue;
}
}
// Create list of Parameters (name, min, max)
static ParmStruct[] ParmList = new ParmStruct[]
{
new ParmStruct { sTextBoxName = mForm.textBox1, dMinValue = -99, dMaxValue = 99 },
new ParmStruct { sTextBoxName = textBox2, dMinValue = 0, dMaxValue = 100 }
};
public Form1()
{
InitializeComponent();
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox tb1;
tb1 = mForm.textBox1;
tb1 = textBox2;
double x = ParmList[0].dMaxValue;
}
}
的ParmList初始化(sTextBoxName = textBox2)
的第二線將無法編譯,除非我讓sTextBoxName = mForm.textBox2.
然而,線tb1 = textBox2
將編譯,不需要mForm。字首。
這是最初引起混淆的實際情況(就我而言,仍然存在)。
不知道爲什麼編譯器(VS 2010)可以在一種情況下計算出來,而不是在另一種情況下。
唉......編譯時代碼工作。 :)
你可以顯示文本框在哪裏以及如何聲明? – 3Pi
@ 3Pi可能在「Form1.Designer.cs」中 –
可能是,但是編程中的假設往往是錯誤的來源。更好地確定,特別是對於應該以相同的方式行事但不是 – 3Pi