Как проверить, открыта ли форма Windows, и закрыть ее, если она есть? - PullRequest
70 голосов
/ 05 октября 2010

У меня есть форма "fm" , это простое информационное окно, которое открывается каждые 10 минут (fm.Show();).

Как я могу сделать так, чтобы каждые 10 минут он проверял, открыта ли форма "fm" , и если она открыта, она закрывает и открывает снова!

Теперь форма fm всегда создается с form fm = new form();
поэтому, когда я пытаюсь проверить, открыта ли форма, она всегда будет ложной и откроет новое окно, даже если раньше была одна форма!

Мне нужен инструмент, чтобы присвоить ему уникальную личность, а затем проверить, открыта ли эта форма с уникальной идентификацией или нет!

Я не хочу просто обновлять данные в форме (fm), потому что у меня есть сложная информация с кнопками.

Имя формы "UpdateWindow"

Спасибо

Ответы [ 25 ]

0 голосов
/ 26 января 2018

На самом деле ниже очень хорошо работает.

private void networkInformationToolStripMenuItem_Click(object sender, EventArgs e)
{
    var _open = false;
    FormCollection fc = Application.OpenForms;
    foreach (Form frm in fc)
    {
        if (frm.Name == "FormBrowseNetworkInformation")
        {
            _open = true;
            frm.Select();
            break;
        }
    }
    if (_open == false)
    {
        var formBrowseNetworkInformation = new FormBrowseNetworkInformation();
        formBrowseNetworkInformation.Show();
    }
}
0 голосов
/ 28 октября 2016

Кроме того, может быть, это поможет


class Helper
    {
        public void disableMultiWindow(Form MdiParent, string formName)
        {
            FormCollection fc = Application.OpenForms;
            try
            {
                foreach (Form form in Application.OpenForms)
                {
                    if (form.Name == formName)
                    {
                        form.BringToFront();
                        return;
                    }
                }

                Assembly thisAssembly = Assembly.GetExecutingAssembly();
                Type typeToCreate = thisAssembly.GetTypes().Where(t => t.Name == formName).First();
                Form myProgram = (Form)Activator.CreateInstance(typeToCreate);
                myProgram.MdiParent = MdiParent;
                myProgram.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
    }

0 голосов
/ 25 апреля 2013

Забавно, мне пришлось добавить в эту ветку.

1) Добавить глобальную переменную в form.show () и очистить переменную в form.close ()

2)В родительской форме добавьте таймер.Держите дочернюю форму открытой и обновляйте ваши данные каждые 10 минут.

3) установите таймер на дочернюю форму, чтобы обновлять данные самостоятельно.

0 голосов
/ 08 мая 2019

Я поправил свой предыдущий пост.Эта работа безупречна без необходимости повторять все открытые формы.

        Form fc = Application.OpenForms["FormBrowse"];
        if (fc != null)
        {
            fc.Select();
        }
        else
        {
            var formBrowse = new FormBrowse();
            formBrowse.Show();
        }
0 голосов
/ 25 июля 2016
 private static Form IsFormAlreadyOpen(Type formType)
 {
     return Application.OpenForms.Cast<Form>().FirstOrDefault(openForm => openForm.GetType() == formType);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...