2009-07-13 4 views
0

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

Я работаю с двумя формами - позволяет называть их 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 который необходимо снова включить форму. К сожалению, я не могу сделать это напрямую, потому что это статический метод.

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

+0

Не понимаю, почему вы создали статический метод, а не экземпляр для вызова? – cdm9002

ответ

1

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

+0

Я пробовал это, но frm_main.Enabled = true не делает ничего на main_form, который я передал, когда создал эту вторую форму. public partial class frmsettings: Form { Форма frm_main; public frmsettings (Form frmparent) { InitializeComponent(); frm_main = frmparent; } частная пустота cmdsave_settings_Click (объект отправителя, EventArgs е) { frm_main.Enabled = TRUE; this.Close(); } – 2009-07-13 21:53:28

+0

Не знал, что форматы не сохраняются. В основном в моем публичном классе у меня есть public sub_form (Form frmparent) {}, который устанавливает глобальную переменную в классе, равном той, которая была передана. Позже, когда она вызывается, она, похоже, не влияет на родительскую форма. Я что-то упустил? – 2009-07-13 21:55:40

+0

Итак, frm_main.Enabled = true; не работает, но frm_main.Close(); по какой-то причине .... – 2009-07-13 21:57:37

0

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

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

public static class Program { 

    public static YourFrom form = null; 

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

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

Смежные вопросы