powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
10 сообщений из 10, страница 1 из 1
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791517
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть:
Создала формы frmMenu, frmAccess, frmAdmin, frmOpaopa и т.д. Все они унаследованы от Form.

Финт такой - я хочу передать в некоторую функцию RunForm не объект, а прямо класс
Код: c#
1.
2.
3.
4.
5.
6.
void RunForm(<formtype>)
{
   Form ff = new formtype(); //ToDo: создание нужной формы
   ff.MdiParent = this;
   ff.Show();
}


, и функция RunForm должна вызвать уже конструктор этой формы и отобразить её.

либо

передать в некоторую функцию void RunForm(Form ff) созданный объект
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void RunForm(Form ff)
{
   try
   {
      ff.Show(); //проблема - если форма была ранее показана, затем скрыта, то выдаст ошибку, поскольку форма уже дестроина
   }
   catch
   {
       ff = new както_определить_тип(); //ToDo: создание нужной формы
       ff.MdiParent = this;
       ff.Show();
   }
}


Пыталась сформулировать вопрос, как могла... Прошу вашей помощи в превращении псеводкода в код
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791535
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однократное открытие формы не в диалоговом режиме можно идею взять из этого обсуждения
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791579
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил Однократное открытие формы не в диалоговом режиме можно идею взять из этого обсуждения
нее, по-большому счёту, в общем случае, каждую форму у меня можно открыть многократно. В противном случае я использую одиночку (singleton)
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791580
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы использовала *
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791592
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome,
гы гы как это класс? может тип?
это делается просто
void RunForm<T>() where T : Form, new()
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791746
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnomeв общем случае, каждую форму у меня можно открыть многократно.
ну тогда как-то так можно (хотя я бы так не делал)
Код: c#
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.
 
         T RunForm<T>() where T : Form, new()
        {
            T form = new T();
            form.MdiParent = this;
            form.Show();
            return form;
        }
        Form RunForm(Form form)
        {
            if (form!=null && form.IsDisposed)
            {
                form = (Form)Activator.CreateInstance(form.GetType());
                form.MdiParent = this;
                form.Show();
            }
            return form;
        }
        Form RunForm(Type formType)
        {
            Form form = null;
            if (formType != null && formType.IsInstanceOfType(typeof(Form)))
            {
                form = (Form)Activator.CreateInstance(formType);
                form.MdiParent = this;
                form.Show();
            }
            return form;
        }
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38791917
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мимими


пасиба!!!)) прямо вот на все 146% то, что нужно!!

а, не, 145, одного не хватает: как вызывать последнюю функцию?
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38792006
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome,

починить нужно третью -
заменить соотв строку на
if (formType != null && formType.IsSubclassOf(typeof(Form)))

Код: c#
1.
2.
3.
4.
5.
Form ff= ...

RunForm(ff.GetType());  // ещё один экземпляр
...
RunForm(typeof(FormXYZ));  // То же что и RunForm<FormXYZ>();
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38792008
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nika gnome,

RunForm(typeof( formType));

или

RunForm(RealForm.GetType() );
...
Рейтинг: 0 / 0
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
    #38792170
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
божественно ^-^
всё работает как часики)))) спасибо))))
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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