У меня есть одно поле со списком в форме окна, и у меня есть один метод, который объявлен статическим, например private static DataTable ParseTable(HtmlNode table)
Теперь я хочу использовать поле со списком в этом методе для использования свойства поля со списком, но я не могу получить доступ к какому-либо свойству поля со списком или самого поля со списком. Если я сделал объявление combobox как статическое, тогда к нему можно получить доступ в этом статическом методе. Но любой альтернативный способ доступа к свойству combobox в этом статическом методе, потому что я не хочу делать объявление combobox статическим.
Доступ к нестатическому свойству combbox в статическом методе
Ответы (4)
Вы можете передать поле со списком в качестве параметра вашего метода. Почему вам нужно, чтобы метод ParseTable
был статическим?
Обновление: вы не можете получить доступ к нестатическим членам класса в статическом контексте. Таким образом, единственное, что вы можете сделать, если вам все еще нужен статический метод, - это каким-то образом передать свое поле со списком этому методу, используя параметры метода.
Вы можете получить доступ к выпадающему списку, передав «это» статическому методу и обратившись к любому элементу, который вам нужен, через «это».
Вы не сможете просто получить доступ к члену экземпляра из статической функции. Один из способов получить доступ — передать элемент управления функции в качестве аргумента. Рассмотрим этот пример.
private void button1_Click(object sender, EventArgs e)
{
Form1.DoSomething(textBox1);
}
public static void DoSomething(TextBox textbox)
{
textbox.Text = DateTime.Now.ToString();
}
Нет необходимости в статическом методе ParseTable в форме. Удалите static из этой функции, если вы хотите, чтобы эта функция взаимодействовала с элементами управления в форме.
Судя по комментариям, нет улучшения производительности, если у вас есть только одна форма. Если у вас есть несколько форм, вызывающих этот статический метод, то ParseTable следует переместить в отдельный статический класс.
Если вы загружаете десять или более полей со списком с помощью этого метода ParseTable, я предлагаю вам воспользоваться предложением Энтони Пеграма и Эндрю Беззуба и передать элемент управления ComboBox по мере необходимости. Я бы не стал передавать это (форму), потому что обычно это создает «уродливый» неуправляемый код.