Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип? / 10 сообщений из 10, страница 1 из 1
30.10.2014, 12:00
    #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
30.10.2014, 12:16
    #38791535
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
Однократное открытие формы не в диалоговом режиме можно идею взять из этого обсуждения
...
Рейтинг: 0 / 0
30.10.2014, 12:44
    #38791579
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
Изопропил Однократное открытие формы не в диалоговом режиме можно идею взять из этого обсуждения
нее, по-большому счёту, в общем случае, каждую форму у меня можно открыть многократно. В противном случае я использую одиночку (singleton)
...
Рейтинг: 0 / 0
30.10.2014, 12:44
    #38791580
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
я бы использовала *
...
Рейтинг: 0 / 0
30.10.2014, 12:55
    #38791592
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
Nika gnome,
гы гы как это класс? может тип?
это делается просто
void RunForm<T>() where T : Form, new()
...
Рейтинг: 0 / 0
30.10.2014, 14:40
    #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
30.10.2014, 16:24
    #38791917
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
мимими


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

а, не, 145, одного не хватает: как вызывать последнюю функцию?
...
Рейтинг: 0 / 0
30.10.2014, 17:11
    #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
30.10.2014, 17:11
    #38792008
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать конструктор у унаследованного класса, если я знаю его базовый тип?
Nika gnome,

RunForm(typeof( formType));

или

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


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