#c# #forms
#c# #формы
Вопрос:
У меня есть настроенный элемент управления build 2.Элемент управления A и элемент управления B
Эти элементы управления размещены более чем в 1 форме.
Пусть предположим, что из A и формы B
Теперь предположим, что пользователь нажимает на элемент управления A в форме A. И вызывается это событие щелчка элемента управления.
Теперь, как было бы определено, что элемент управления A находится в форме A.
Чтобы я мог изменить конкретный атрибут элемента управления B формы A.
Комментарии:
1. Не могли бы вы предоставить нам более подробную информацию, чтобы мы могли предоставить вам лучшие ответы…
2. Вы работаете над приложением на базе Windows forms?? Почему и где за пределами формы, где находятся элементы управления A amp; B, вы хотите обработать событие A??
Ответ №1:
Вы можете использовать Control.Parent
рекурсивно. Также вы можете использовать Control.TopLevelControl
, если у вас нет вложенных форм. Затем вам нужно рекурсивно обойти Controls
свойства, чтобы найти свой второй элемент управления.
Но более правильным решением вашей задачи является создание свойства в первом элементе управления и присвоение его второму элементу управления и использование его в обработчике событий.
Комментарии:
1. Но это настраиваемый элемент управления, поэтому родительский элемент управления будет настраивать сам себя, а не форму, в которой они расположены.
2. Родительским элементом элемента управления не может быть сам элемент управления, даже если элемент управления настроен, но в любом случае я использовал слово «рекурсивно» с определенной целью.
Ответ №2:
Обрабатывать событие элемента управления A внутри каждой формы..
Комментарии:
1. Но я должен обрабатывать эти события везде, где они используются.
2. @Zain: С тем уровнем детализации, который вы предоставляете, я не могу предоставить вам лучшее решение..
Ответ №3:
Какую версию C # вы используете? Если вы используете относительно новую версию и используете Windows Presentation Foundation (WPF), вы можете сделать что-то вроде этого:
private void ControlA_MouseDown(object sender, MouseButtonEventArgs e)
{
((Grid)((ControlA)sender).Parent).Children
// The above line is INCOMPLETE, you need to select the right child, but
// you're at least in the right grid; The rest is up to you (depends on
// the setup of your program);
}
Вы можете использовать другой вариант «взлома», который, безусловно, самый простой. Вы можете использовать свойство ‘tag’ элемента управления для хранения всего, что вам нравится, например, указателя на ControlB.
ControlA a = new ControlA();
ControlB b = new ControlB();
a.Tag = b;
Обратите внимание, что это взлом, и правильный способ — создать такое поле / переменную в пользовательском элементе управления самостоятельно. Это более или менее демонстрация того, как это могло бы работать.
Ответ Акрама Шахды возможен только в том случае, если ваши формы не создаются динамически, поскольку тогда вы можете предопределить все действия. Тем не менее, я бы не пошел этим путем.