Навигация между несколькими формами в C # - PullRequest
0 голосов
/ 10 августа 2011

У меня есть 2 формы, из которых к одной из них добавлен компонент ударной волны, он проигрывает флэш-фильм и при нажатии кнопки, созданной во флэш-памяти, выгружается форма 1 (frmFlashIntro) и запускается форма 2 (frmMain). Поскольку frmFlashIntro - это форма, которая используется только один раз, я хочу выгрузить форму, а не скрывать ее. я также хочу, чтобы frmMain имел полный контроль после закрытия frmFlashIntro, как если бы это была основная форма. Сокрытие формы, кажется, не является хорошим способом сделать это.

Что я сейчас делаю, так это то, что я создал свойство в frmFlashIntro и добавил к ним методы get и set (оба они blanK)

public Form FormfrmMainRef { get; set; }

Я добавил этот код в событие щелчка.

frmMain fm = new frmMain();
this.FormfrmMainRef = fm;
FormfrmMainRef.Show();

теперь это эффективно показывает мой frmMain, но сохраняет работу frmFlashIntro, поэтому я сделал это

frmFlashIntro fi=new frmFlashIntro();
fi.Close();//checked with dispose also

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

Также я не хочу использовать MDI

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Похоже, что frmMain не имеет ссылки на оригинальный frmFlashIntro. Ваш бит кода

frmFlashIntro fi=new frmFlashIntro();
fi.Close();//checked with dispose also

фактически создаст второе frmFlashIntro, поэтому, когда вы вызываете fi.Close (), вы фактически закрываете вторую форму, а не оригинал.

Теоретически, вы должны иметь возможность добавить свойство к вашему frmMain, которое ссылается на frmFlashIntro, а затем вызвать Dispose для этого, что-то вроде

frmMain fm = new frmMain (); this.FormfrmMainRef = fm; fm.FormIntroRef = this; FormfrmMainRef.Show ();

А затем в событие загрузки frmMain добавьте вызов FormIntroRef.close ()

Хорошо, но, кроме всего прочего, я думаю, что лучший способ решить эту проблему - обновить файл Program.cs и затем получить что-то вроде

frmFlashIntro flashIntro = new frmFlashIntro
frmFlashIntro.ShowDialog();
frmMain mainForm = new frmMain()
Application.Run(frmMain);

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

MainForm frmMain = new MainForm()

Это должно достичь желаемого результата.

0 голосов
/ 10 августа 2011

Вы пытались утилизировать форму с помощью fi.Dispose ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...