powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблемка с Reflection
15 сообщений из 15, страница 1 из 1
Проблемка с Reflection
    #32962554
bluurp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все вроде просто, но не работает.
Из сборки гружу форму и пытаюсь вызвать ее событие 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
Проблемка с Reflection
    #32962595
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем ты показываешь форму через базовый класс ?
попробуй вызвать ShowDialog непосредственно для типа this._FormType
...
Рейтинг: 0 / 0
Проблемка с Reflection
    #32962613
bluurp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал.
Ошибка: Метод ShowDialog не найден.
Вроде этот метод описан не в System.Windows.Forms.Form, а унаследован от родителя.
...
Рейтинг: 0 / 0
Проблемка с Reflection
    #32962639
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чему равен this._Flags ?
...
Рейтинг: 0 / 0
Проблемка с Reflection
    #32962792
bluurp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описано выше:
Код: plaintext
1.
2.
private BindingFlags _Flags = (BindingFlags.NonPublic | BindingFlags.Public | 
			BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
...
Рейтинг: 0 / 0
Проблемка с Reflection
    #32962821
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убери флаг BindingFlags.DeclaredOnly
...
Рейтинг: 0 / 0
Проблемка с Reflection
    #32963029
bluurp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Атрибут убрал, но ни одна из следующих строк метод все равно не вызвала
Код: 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
Проблемка с Reflection
    #32963050
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может немного не понимаю задачу...
но если ты вызываешь ShowDialog, то сработает событие Load и метод обработки этого события будет вызван ВНУТРИ frmShop.

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

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

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


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