2010-04-02 4 views
1

У меня есть одно поле со списком в форме окна, и у меня есть один метод, объявленный с помощью static, как private static DataTable ParseTable(HtmlNode table) Теперь я хочу использовать combobox в этом методе для использования свойства combobox, но я не могу доступ к любому свойству combobox или combobox. Если я сделал объявление combobox статичным, то к нему можно получить доступ в этом статическом методе. Но любой альтернативный способ доступа к свойствам combbox в этом статическом методе, потому что я не хочу делать объявление combobox как статичный.Доступ к свойствам нестатического гребня в статическом методе

ответ

1

Вы можете передать combobox в качестве параметра вашему методу. Зачем вам нужен метод ParseTable как статический?

Update: Вы не можете получить доступ к нестатические членов класса в статическом контексте. Таким образом, единственное, что вы можете сделать, если вам все еще нужно иметь статический метод, - это как-то передать ваш combobox этому методу с использованием параметров метода.

+0

@Andrew Bezzub, этот метод называется часто, и я хочу улучшить производительность приложения, поэтому я объявил этот метод как статический. – Harikrishna

+1

@Harikrishna, я думаю, что это не подходящее место для оптимизации производительности. –

+0

@Andrew Bezzub, может быть почти десять combobox и даже нет фиксированного числа combobox, которое может быть в форме окна. – Harikrishna

0

В форме не требуется статический метод ParseTable. Удалите статические данные из этой функции, если вы хотите, чтобы эта функция взаимодействовала с элементами управления в форме.

От чтения комментариев нет улучшения производительности, если у вас есть только одна форма. Если у вас есть несколько форм, вызывающих этот статический метод, тогда ParseTable следует переместить в отдельный статический класс.

Если вы загружаете десять или более комбинированных блоков, используя этот метод ParseTable, я предлагаю вам использовать предложение Энтони Пеграма и Эндрю Беззюба и передать управление ComboBox по мере необходимости. Я бы избегал передавать это (форму), потому что он обычно создает «уродливый» неуправляемый код.

0

Вы можете получить доступ к combobox, передав «это» статическому методу и получив доступ к любому члену, который вам нужен над «этим».

+0

@Adrian Faciu, Пожалуйста, объясните кратко. – Harikrishna

+0

@Harikrishna, посмотрите на мой ответ. За исключением того, что вместо того, чтобы получать TextBox, как в моем примере, вы получите объект типа вашей формы (Form1?). Затем вы можете вызвать эту функцию, используя «this» в качестве аргумента. Сама функция могла бы получить доступ к доступным членам параметра. –

+0

@Harikrishna, Энтони прав, это было бы так же, но вместо параметра TextBox у вас была бы форма. Если вам нужны только данные из текстового поля, вы должны пойти с этим, с помощью «этого» вы можете получить доступ ко всем членам вашей формы. –

0

Вы не сможете просто получить доступ к члену экземпляра из статической функции. Один из способов получить доступ - вы можете передать управление функции в качестве аргумента. Рассмотрим этот пример.

private void button1_Click(object sender, EventArgs e) 
{ 
    Form1.DoSomething(textBox1); 
} 

public static void DoSomething(TextBox textbox) 
{ 
    textbox.Text = DateTime.Now.ToString(); 
} 
Смежные вопросы