Толик Панков
hex_laden
............ .................. ................
November 2020
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Толик Панков [userpic]
C#, передача форме фокуса, если она открыта, и открытие, если ее нет.

Практически идентичное решение уже обсуждалось в заметке "C#, проверить, открыта ли форма" (копия).

Делается все примерно также. Для удобства вынесем проверку, открыта ли форма в отдельную функцию:

private bool IsFormOpen(string FormName)
{
    foreach (Form f in Application.OpenForms)
    {
        if (f.Name == FormName)
        {
            f.Focus();
            return true;
        }
    }
    return false;
}


Если форма открыта, устанавливаем ей фокус (f.Focus()) и возвращаем true. Если формы нет - возвращаем false.

В обработчике события, в котором будем вызывать форму, вызываем эту функцию, и если она вернула false, создаем и показываем форму, иначе выходим из обработчика:

private void btnChild1_Click(object sender, EventArgs e)
{
    if (IsFormOpen("frmChild1")) return;
    
    frmChild1 fChild1 = new frmChild1();
    fChild1.Show();
}

private void btnChild2_Click(object sender, EventArgs e)
{
    if (IsFormOpen("frmChild2")) return;

    frmChild2 fChild2 = new frmChild2();
    fChild2.Show();
}


Пример на GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/11/18/c-peredacha-forme-fokusa-esli-ona-otkryta-i-otkrytie-esli-ee-net/

Tags: ,