Как узнать, в какой форме существует элемент управления

#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;
  

Обратите внимание, что это взлом, и правильный способ — создать такое поле / переменную в пользовательском элементе управления самостоятельно. Это более или менее демонстрация того, как это могло бы работать.

Ответ Акрама Шахды возможен только в том случае, если ваши формы не создаются динамически, поскольку тогда вы можете предопределить все действия. Тем не менее, я бы не пошел этим путем.