Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблемка с Reflection / 15 сообщений из 15, страница 1 из 1
16.03.2005, 10:54
    #32962554
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Все вроде просто, но не работает.
Из сборки гружу форму и пытаюсь вызвать ее событие OnLoad перед выводом.
Форма грузится и выводится, но метод по событию OnLoad не вызывается.
Подскажите, в чем проблема?
Код следующий:

в классе поля:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
private string _Name;
private BindingFlags _Flags = (BindingFlags.NonPublic | BindingFlags.Public | 
			BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
private string _AssemblyPath;
private Assembly _Assembly;

private object _ExtForm;
private Type _FormType;

Вызываю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
this._Assembly = Assembly.LoadFile(this._AssemblyPath);

this._FormType = this._Assembly.GetType("frmShop");
this._ExtForm = Activator.CreateInstance(this._FormType);			
		
//вызовем метод по событию OnLoad()
this._FormType.BaseType.InvokeMember("OnLoad",this._Flags | BindingFlags.InvokeMethod,null,this._ExtForm,new object[] {new System.EventArgs()});
//или так
this._FormType.InvokeMember("frmShop_Load",this._Flags | BindingFlags.InvokeMethod,null,this._ExtForm,new object[] {this,new System.EventArgs()});

//отобразим
return (System.Windows.Forms.DialogResult)this._FormType.BaseType.InvokeMember("ShowDialog", this._Flags | BindingFlags.InvokeMethod,null,this._ExtForm,new object[] {Owner});
...
Рейтинг: 0 / 0
16.03.2005, 11:04
    #32962595
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
зачем ты показываешь форму через базовый класс ?
попробуй вызвать ShowDialog непосредственно для типа this._FormType
...
Рейтинг: 0 / 0
16.03.2005, 11:07
    #32962613
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Пробовал.
Ошибка: Метод ShowDialog не найден.
Вроде этот метод описан не в System.Windows.Forms.Form, а унаследован от родителя.
...
Рейтинг: 0 / 0
16.03.2005, 11:14
    #32962639
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
чему равен this._Flags ?
...
Рейтинг: 0 / 0
16.03.2005, 11:52
    #32962792
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Описано выше:
Код: plaintext
1.
2.
private BindingFlags _Flags = (BindingFlags.NonPublic | BindingFlags.Public | 
			BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
...
Рейтинг: 0 / 0
16.03.2005, 11:59
    #32962821
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
убери флаг BindingFlags.DeclaredOnly
...
Рейтинг: 0 / 0
16.03.2005, 12:39
    #32963029
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Атрибут убрал, но ни одна из следующих строк метод все равно не вызвала
Код: plaintext
1.
2.
3.
this._FormType.BaseType.InvokeMember("OnLoad",this._Flags | BindingFlags.InvokeMethod,null,this._ExtForm,new object[] {new System.EventArgs()});
this._FormType.InvokeMember("OnLoad",this._Flags | BindingFlags.InvokeMethod,null,this._ExtForm,new object[] {new System.EventArgs()});
this._FormType.InvokeMember("frmShop_Load",this._Flags | BindingFlags.InvokeMethod,null,this._ExtForm,new object[] {this,new System.EventArgs()});
...
Рейтинг: 0 / 0
16.03.2005, 12:44
    #32963050
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
может немного не понимаю задачу...
но если ты вызываешь ShowDialog, то сработает событие Load и метод обработки этого события будет вызван ВНУТРИ frmShop.

зачем его вызывать принудительно ИЗВНЕ ?
...
Рейтинг: 0 / 0
16.03.2005, 12:58
    #32963103
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
если убрал DeclaredOnly:

второй вариант - должен работать.
если есть private метод frmShop_Load, то и третий вариант - рабочий.
...
Рейтинг: 0 / 0
16.03.2005, 13:10
    #32963145
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Хм, действительно. Должен бы и сам вызываться.
Но в начале метода frmShop_Load(...) стоит
Код: plaintext
System.Windows.Forms.MessageBox.Show("Loading");
и вот этого-то сообщения и нет, да и дальше по тексту ничего не выполняется.
Важно ли, что именно передавать в параметр sender метода
Код: plaintext
private void frmShop_Load(object sender, System.EventArgs e)
?
...
Рейтинг: 0 / 0
16.03.2005, 13:15
    #32963172
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
если внутри метода sender не используется - можно и null

тут важно, чтобы этот метод обрабатывал событие Load формы :)
т.е. была привязка типа
Код: plaintext
this.Load += new System.EventHandler(this.frmShop_Load);
либо ручная либо через дезайнер формы frmShop
...
Рейтинг: 0 / 0
16.03.2005, 13:24
    #32963220
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Данная привязка есть.
Но даже прямой вызов метода не дает результатов.
Есть какой-нить небольшой, но реально работающий код по вызову события объекта?
...
Рейтинг: 0 / 0
16.03.2005, 13:36
    #32963269
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
посмотри вот этот код
здесь форма и вызов ее методов через reflection
...
Рейтинг: 0 / 0
16.03.2005, 13:51
    #32963329
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
создай новый проект WinForms и замени весь текст в Form1 на текст из приложенного файла
...
Рейтинг: 0 / 0
16.03.2005, 15:02
    #32963596
bluurp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемка с Reflection
Спасиба, Кузя.
Что именно сделал сам не знаю, но после копирования из твоего проекта и мелкого исправления - заработали все три варианта.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблемка с Reflection / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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