2015-10-30 2 views
0

Я хочу вызвать функцию update в форме1 при щелчке даже кнопки в форме2. Метод обновления внесет изменения в элементы управления в форме1. Я использую этот подход, но когда я обращаюсь к нему, он не дает доступа (когда метод не статичен), и когда я создаю метод static, он просит сделать элементы управления статическими тоже, которых я не хочу. Есть ли другой путь ?Как получить доступ к не статическому методу form1 из формы2

public button1_click() 
{ 

Form1.update(); 

} 

// method in form1 

public static void update() 
{ 

control.Text="ab"; 

} 

ответ

4

Вы не можете получить доступ к нестационарным переменным в статических методах. Обратитесь к documentation:

Хотя экземпляр класса содержит отдельную копию всех полей экземпляра класса есть только один экземпляр каждого статического поля.

Нельзя использовать это для ссылки на статические методы или аксессоры свойств.

В этом случае, если ваш метод update (BTW должен быть Update) необходимо получить доступ к не статическим членам вашего класса, вы должны сделать это не статическую, и изменить Form2 следующим образом:

1) Добавить конструктор поля и изменение формы в Form1 принять экземпляр в качестве параметра:

private Form1 form1; 

public Form2(Form1 form1) 
{ 
    this.form1 = form1; 
} 

2) При создании form2 из form1 передать свой экземпляр:

Form2 form2 = new Form2(this); // when in Form1 

Если вы создаете Form2 в каком-то другом контексте вам нужно (по аналогии) имеют form1 экземпляр под рукой и называют:

Form2 form2 = new Form2(form1); 

3) Изменение обработчика событий для работы на конкретном экземпляре Form1:

public button1_click() 
{ 
    this.form1.update(); 
} 
Смежные вопросы