powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Однократное открытие формы не в диалоговом режиме
11 сообщений из 11, страница 1 из 1
Однократное открытие формы не в диалоговом режиме
    #38785526
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private void button2_Click(object sender, EventArgs e)
        {
            bool formOpen = false;
            foreach (Form f in Application.OpenForms)
            {
                if (f is Form2)
                {
                    formOpen = true;
                    f.BringToFront();
                }
            }
            if (!formOpen)
            {
                Form2 f2 = new Form2();
                f2.Show();
            }
        }


Возникли вопросы
1) Существует ли аналогичная стандартная функция?
2) Если нет то как упростить написанный выше код?
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38785741
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81,

код и так простой, трёхкратное упоминание типа Form2 не есть хорошо.
можно изобразить что-то такое
Код: c#
1.
2.
3.
4.
5.
6.
public static T ShowForm<T>() where T : Form, new()
        {
            var f = Application.OpenForms.OfType<T>().FirstOrDefault();
            if (f == null) (f = new T()).Show(); else f.BringToFront();
            return f;
        }

...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38785951
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81,

не проще инициализировать форму из конструктора другой формы и потом обращаться к форме по этому полю?
аля:
private readonly MyForm _form;
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38785956
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, дык может форма не только из одной другой формы открывается :)
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38785980
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

ну тогда в статическом классе Program создаем поле, инициализируем его из Main и потом обращаемся как к статическому полю аля

Program.MyForm.Show();
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38785996
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesskyANA,

ну тогда в статическом классе Program создаем поле, инициализируем его из Main и потом обращаемся как к статическому полю аля

Program.MyForm.Show();Жесть.
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38786528
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилwebber81,

код и так простой, трёхкратное упоминание типа Form2 не есть хорошо.
можно изобразить что-то такое
Код: c#
1.
2.
3.
4.
5.
6.
public static T ShowForm<T>() where T : Form, new()
        {
            var f = Application.OpenForms.OfType<T>().FirstOrDefault();
            if (f == null) (f = new T()).Show(); else f.BringToFront();
            return f;
        }



а как юзать этот генерик? ShowForm(my_form); ругается.
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38786534
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

ну или любой статический класс :) чем плохо то? :)
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38786573
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesskyANA,

ну или любой статический класс :) чем плохо то? :)
Потому как потребуется применить однократное открытие не только для конкретной формы MyForm и надо сделать метод ShowOnce<TFrom> (как предложил Изопропил) и использовать везде, где надо.
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38786579
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Изопропилwebber81,

код и так простой, трёхкратное упоминание типа Form2 не есть хорошо.
можно изобразить что-то такое
Код: c#
1.
2.
3.
4.
5.
6.
public static T ShowForm<T>() where T : Form, new()
        {
            var f = Application.OpenForms.OfType<T>().FirstOrDefault();
            if (f == null) (f = new T()).Show(); else f.BringToFront();
            return f;
        }



а как юзать этот генерик? ShowForm(my_form); ругается.Дак нет такого метода, что Вы пытаетесь вызвать.

Код: c#
1.
2.
3.
4.
public class MyForm: Form
{
    // ...
}


Код: c#
1.
var singleForm = ShowFrom<MyForm>();
...
Рейтинг: 0 / 0
Однократное открытие формы не в диалоговом режиме
    #38786597
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAjenya7пропущено...


а как юзать этот генерик? ShowForm(my_form); ругается.Дак нет такого метода, что Вы пытаетесь вызвать.

Код: c#
1.
2.
3.
4.
public class MyForm: Form
{
    // ...
}


Код: c#
1.
var singleForm = ShowFrom<MyForm>();



спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Однократное открытие формы не в диалоговом режиме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]