Модификация нестатического объекта из статического метода - PullRequest
0 голосов
/ 13 июля 2009

Сначала я расскажу вам, что я пытаюсь сделать, а затем, как я пытаюсь это сделать. Если есть лучший способ, пожалуйста, дайте мне знать.

Я работаю с двумя формами - давайте назовем их form_main и form_preferences

Когда форма form_preferences открыта, я хочу, чтобы form_main был отключен, пока не будет нажата кнопка (кнопка сохранения) в form_preferences.

Итак, вот что я делаю: Кнопка нажата в form_main

form_preferences frm_p = new form_preferences();
frm_p.Visible = true;
this.enabled = false;

// пока все хорошо

Когда я нажимаю сохранить в form_preferences, он вызывает публичный статический метод в form_main, который должен снова включить форму. К сожалению, я не могу сделать это напрямую, потому что это статический метод.

Я пытался создать новый экземпляр формы, но тогда мне пришлось бы создать новый экземпляр и уничтожить исходный, который кажется большой тратой и неэффективным. Есть ли лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 13 июля 2009

Измените метод form_main на метод экземпляра вместо статического. Передайте экземпляр form_main вашей sub_form при создании, чтобы он сохранил ссылку.

0 голосов
/ 13 июля 2009

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

В вашем основном методе выполните следующее ...

public static class Program {

  public static YourFrom form = null;

  public static void Main(string args[]) {
    Program.form = new YourFrom();
    Application.Run(form);   
  }
}

И всякий раз, когда вам нужен доступ к объекту формы в вашем классе, используйте объект Program.form для доступа к нему.

...