Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запуск неизвестной формы (Reflection ?) 
:(
    Опции темы
tusha
Дата 15.2.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 17.7.2008

Репутация: нет
Всего: 1



доброго утра всем
вопрос такой : как запустить форму, если имя ее становится известно только на момент исполнения? 
к примеру:
Код

class MyClass
    {
        string FormName = "form_to_run";
        void RunForm()
        {
             // здесь надо запустить форму с именем form_to_run
        }
    }

естественно форма существует в дереве проектов (ну или создается заранее)
PM MAIL   Вверх
Экскалупатор
Дата 15.2.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



а формы все в твоей проге создаются? или ты их берешь откуда то?
ты должен где то создать эту форму, а потом передать ее как параметр в этот метод.
PM MAIL ICQ   Вверх
tusha
Дата 15.2.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 17.7.2008

Репутация: нет
Всего: 1



формы уже есть в проекте. у меня есть класс (менеджер форм), в конструктор которого я передаю ввиде строки название формы, которую он должен запускать.
(ну тоесть условия if parameter then form1.show else form2.show не подходят - таких форм много и они будут постоянно добавляться)
PM MAIL   Вверх
KelTron
Дата 15.2.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Заведи словарь Dictionary<string, Form>, а потом из него по имени выбирай...


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
tusha
Дата 15.2.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 17.7.2008

Репутация: нет
Всего: 1



возможно я не так обьяснил.
я пишу (велосипед? =) ) управление справочниками - есть класс, который содержит инфу о справочной таблице - имя таблицы, какие поля показывать, примари кей и прочее. так же одно из полей содержит имя формы, через которую будет осуществляться добавление/редактирование записи. 
визуально этот класс представляет usercontrol  ввиде комбобокса и кнопки - и при нажатии на эту кнопку вываливается указанная форма.
и соответственно под каждый справочник свой класс управления)

Добавлено через 7 минут и 34 секунды
о том , за какую таблицу будет отвечать данный справочник (тоесть какую форму запускать) я моги указать лишь на этапе размещения контролов на форме
PM MAIL   Вверх
KelTron
Дата 15.2.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Не понял в чём проблема с Dictionary, делаешь примерно так:
Код

private Dictionary<string, Form> forms = new Dictionary<string, Form>();
...
//Инициализация 
forms["Form1"] = new Form1();
forms["Form2"] = new Form2();
forms["Form3"] = new Form3();
...

//Использование
string formName = ...
forms[formName].Show();


Если уж так хочется рефлекшин то:
Код

Type formType = Type.GetType("WindowsFormsApplication15.Form1");
object form = formType.InvokeMember(null, BindingFlags.CreateInstance, null, null, null);
formType.InvokeMember("Show", BindingFlags.InvokeMethod, null, form, null);

Обрати внимание, тут нужно указывать полное имя типа.




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
tusha
Дата 15.2.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 17.7.2008

Репутация: нет
Всего: 1



можно и через словарь, только надо в моем классе SprvManager указывать на него ссылку. притом что сам класс будет скомпилен в длл. и подключаться оттуда. 
+ к этому надо реализовывать класс-синглтон для управления словарем. ввиду того что справочник будет не один а словарь должен быть общим
за решение с рефлексией спасибо, будем пробовать
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.