Как получить входную сборку во время разработки в C#?
Я создал пользовательский компонент в одном проекте с UITypeEditor. В классе component у меня есть один атрибут MyFormSettings: это открытая форма. он имеет один combobox, который отображает все имена форм в сборке ввода.
В тестовом проекте я добавил пользовательский компонент в toolbox, и когда я перетаскиваю компонент в тестовый проект, то создаю новую форму. Я могу получить окно свойств с помощью свойства Myformsettings. но я получаю ошибку ССЫЛКА на объект не установлена
Type formType = typeof(форма);
Сборка myAssembly = сборка.GetEntryAssembly();
(типа foreach в сборке.метод GetType())
{
// foreach (Type type in types)
if (formType.IsAssignableFrom(тип))
{
Поле combobox1.Предметы.Добавить(type.Name);
}
}
Как я могу получить входную сборку во время проектирования?
Что я уже пробовал:
Я получаю не в состоянии получить информацию о сборке записи во время разработки.
Ralf Meier
Ваш вопрос мне непонятен.
Что вам нужно ? Я полагаю, вы хотите получить форму, в которой экземпляр вашего компонента ...?
Poornima Santhosh
Я хочу создать пользовательский компонент для приложения Windows, который будет предоставлять свойство во время разработки, которое является выпадающим списком. Раскрывающийся список должен содержать все формы Windows проекта, ссылающиеся на этот пользовательский компонент.
Ralf Meier
.. Итак, вы хотите построить список тех форм, где используется / создается ваш компонент ...?
Poornima Santhosh
да
Ralf Meier
У меня есть VB-код, который доставляет компонент, который является родительской формой во время разработки.
Это то, что я могу дать вам - возможно, это поможет вам - но это не то решение, которое вы хотите иметь ...
Скажи мне свое решение ...
Poornima Santhosh
Дайте мне код, который я выполню и проверю в c#
Ralf Meier
Извините... Что ты имеешь в виду?
Poornima Santhosh
Мне нужен путь сборки родительской формы.
Poornima Santhosh
Мне удалось получить выпадающий список со всеми формами в том же проекте, что и customcomponent. но не удается получить формы из основного приложения компонента.
Poornima Santhosh
Я хочу, чтобы список компонент parentform управления список событий?
Ralf Meier
Что ты имеешь в виду?
Если компонент знает, что это родительская форма, он может получить доступ к каждому элементу управления в форме. Это также означает, что он может также получить доступ к каждому из событий каждого (или определенного типа) элемента управления.
Но, конечно, я могу дать вам больше информации, если вы уточните свой вопрос ...
Poornima Santhosh
Я не получаю список событий.
Я использую этот код
Контроль.метод GetType().GetEvents();
Ralf Meier
Я видел это в твоем другом вопросе.
Чего вы пытаетесь достичь ? Я полагаю, вы хотите знать, какие события из существующих элементов управления используются (имеют делегатов) ? Я не делал этого раньше (потому что в этом нет необходимости), но я думаю, что использование рефлексии (в правильном направлении) - это лучший подход ...
Только для моего понимания - для чего это хорошо ? Возможно, есть другой способ (для вас) получить то, что вы хотите ...
Poornima Santhosh
Я разрабатываю SDK в .net., который используется для автоматической генерации запросов к базе данных. разработчик должен указать поля и таблицу базы данных, которые они используют для каждой формы, через мой пользовательский компонент. пользовательский компонент-это окно свойств. В фоновом режиме я создаю xml-файл для каждой формы, то есть для генерации запросов.
все это происходит во время проектирования.
один из моих технических руководителей имеет некоторое представление о том, что во время выполнения у меня есть кнопка сохранения в любой форме. В случае щелчка он должен вызвать InsertQueryGenerator и выполнить его автоматически, не имея оператора вызова в кнопке сохранения. Я думаю, что это невозможно сделать для toolstripbutton.
Ralf Meier
Привет,
мой пример взят из моего поставщика разрешений, который предоставляет дополнительные свойства элементам управления формы и дает разработчику возможность решить, какое разрешение необходимо для какого элемента управления-вы видите : это сопоставимое упражнение ...
Поэтому я думаю, что 1-я часть вашего последнего ответа должна быть легко осознана ...
2-я часть вашего ответа (часть с кнопкой сохранения) Я понял так : во время разработки кнопка не существует (почему бы и нет?), а во время выполнения она добавляется в форму (возможно, в зависимости от настройки свойств компонента). Если компонент добавляет кнопку сам по себе, то его события должно быть легко поймать. Но я не предпочитаю этот способ - я бы добавил его в форму во время разработки. Чтобы легко обнаружить эту кнопку (независимо от ее имени и текста), вы можете создать собственный тип кнопки (возможно, тип SaveButton, который непосредственно происходит от Button) и найти ее по типу в коллекции элементов управления формы.
Другим возможным способом для этого может быть : у вас есть свойство в вашем компоненте, в котором вы можете выбрать кнопки формы, и если здесь сделан выбор, то выбранная кнопка является вашей Кнопкой сохранения (из которой вы ловите события).
Часть вашего ответа с кнопкой Toolstrip я не понял - возможно, вы мне ее объясните.
Если одно из моих предложений вам интересно (и вам нужна дополнительная информация), пожалуйста, ответьте ...
Приятных вам выходных ...
Poornima Santhosh
Кнопка сохранения добавляется только во время разработки, а не во время выполнения.
Вот мой Xml-формат, который включает в себя все элементы управления формой, действия, которые нужно выполнить над каким событием, информацию о таблице БД с атрибутами и типом данных.
<?xml version="1.0" encoding="utf-8" ?>
- &ЛТ;FormXML префиксом xmlns:xsi в="http://www.w3.org/2001/XMLSchema-instance" префиксом xmlns:xsd-файл="http://www.w3.org/2001/XMLSchema" название="Form3"&ГТ;
- <список>
<имя элемента управления="label1" тип="Label" />
<имя элемента управления="lblEmployeeName" тип="Label" />
<имя управления="txtDesignation" тип="текстовое поле" /&ГТ;
<имя элемента управления="lblEmpAddress" тип="Label" />
<имя элемента управления="label2" тип="Label" />
<имя элемента управления="lblEmpCity" тип="Label" />
<имя элемента управления="cmbState" тип="ComboBox" />
<имя элемента управления="lblState" тип="Label" />
<имя элемента управления="comboBox1" тип="ComboBox" />
<Control Name="txtName" type="TextBox" />
<имя элемента управления="txtAddress" тип="TextBox" />
<Control Name="txtCity" type="TextBox" />
<имя элемента управления="btnClear" тип="кнопка" />
<имя элемента управления="btnDelete" тип="кнопка" />
<имя элемента управления="btnAdd" тип="кнопка" />
<имя элемента управления="txtTotal" тип="TextBox" />
<имя элемента управления="lblSalary" тип="Label" />
<имя элемента управления="label4" тип="Label" />
<имя управления="txtBasic" тип="текстовое поле" /&ГТ;
<имя элемента управления="txtESI" тип="TextBox" />
<имя элемента управления="label3" тип="Label" />
<имя элемента управления="lblESI" тип="Label" />
<имя элемента управления="txtPF" тип="TextBox" />
- <действия>
- <тип действия="сохранить">
- <Параметры>
&ЛТ;псевдоним атрибута="Exp0" выражение="сотрудник:имя:текст" /&ГТ;
<атрибут Alias="Exp1" выражение="сотрудник:обозначение:текст" />
- <список аргументов>
<аргумент ControlObject="TextBox:txtName" событие="Click" />
&ЛТ;ControlObject аргумент="текстовое поле:txtDesignation" событие="очередь textchanged" /&ГТ;
- <таблицы>
работник
Используя этот XmL, я создал InsertQuery. У меня есть отдельный класс для автоматического создания запроса.
Poornima Santhosh
Я не знаю, как использовать EventHandlers. Я должен вызвать соответствующие события в xml с помощью обработчиков событий