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