Модальные и немодальные диалоги - PullRequest
1 голос
/ 12 марта 2012

У меня есть две формы, а именно One и Two, и текст заголовка обоих совпадает с их именами.

One имеет кнопку, и событие click ее содержит,

Two l_objTwo = new Two();
l_objTwo.Show();            
MessageBox.Show("Two Closed");

Открывается Two, после чего появляется сообщение «Два закрытых».

Мой сценарий заключается в том, что Two должен открываться Modeless способом, т.е. мне нужен контроль One, и в то же время мне нужно выполнить некоторые функции после закрытия Two.На данный момент я использую как,

[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(String sClassName, String sAppName);

Two l_objTwo = new Two();
l_objTwo.Show();
IntPtr l_objHandle = FindWindow(null, "Two");
while ((int)l_objHandle > 0)
{
    l_objHandle = FindWindow(null, "Two");
    Application.DoEvents();
}
MessageBox.Show("Two Closed");

Это работает нормально, но это единственный способ добиться этого?

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Использовать обработчик событий

var two = new Two();
two.Closed += OnTwoClosed;
two.Show();

private void OnTwoClosed(object sender, EventArgs e)
{
    MessageBox.Show("Two Closed")
}

Не тестировал этот код на winforms Form, но принцип такой же, и он проще, чем использование Windows API со всеми присущими ему ошибками.

Другое преимущество заключается в том, что названия окон могут быть любыми.

После проверки здесь кажется, что Closed и FormClosed являются действительными событиями.

1 голос
/ 12 марта 2012

Нет, это не единственный способ. Ваша первая форма будет прикреплять обработчик к FormClosed или FormClosing открытым событиям второй формы.

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

Просто используйте этот фрагмент:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f = new Form2();
        f.FormClosed += new FormClosedEventHandler(FormClosedHandler);
        f.Show();
    }
  void FormClosedHandler(object sender, FormClosedEventArgs e)
    {
        MessageBox.Show("Second form has closed.");
    }
0 голосов
/ 12 марта 2012

Это выглядит грязно.Не уверен, что вы хотите достичь здесь.Просто откройте форму два в обработчике события One и подключите событие onclose два к вашему MessageBox.

...