Каков эффективный метод динамической обработки страниц вкладок с пользовательскими элементами управления в них?

#c# #winforms

#c# #winforms

Вопрос:

Я ищу эффективный способ обработки (методов и событий элементов управления) динамически созданных страниц вкладок с динамически созданными элементами управления в них (одинаковый интерфейс для каждой страницы вкладки).

Я хочу иметь возможность определить, с какой страницы вкладки произошло событие нажатия кнопки и такое поведение.

Можно ли настроить меня с помощью общего списка коллекций, в котором будут храниться страницы вкладок? Где и в чем я хочу хранить ссылки для каждого отдельного элемента управления вместе с их методами и событиями? Хочу ли я также хранить ссылки для каждого отдельного элемента управления в списках общих коллекций? Я надеюсь избежать метода наследования страницы вкладок пользовательского элемента управления. В конечном итоге это будет самый эффективный маршрут, который мне придется выбрать?

Ответ №1:

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

Да, List<TabPa&e&&t; сработал бы. Но также TabControl.Свойство TabPa&es.

Комментарии:

1. Подробнее о TabControl. Страницы вкладок. Свойство control, ну, одним из путей, которым я воспользовался, было создание всего в методе (например, файле конструктора), затем добавление страницы tab к элементу управления tab изнутри. Я немного запутался в том, как я мог бы определить из обработчика событий, какая кнопка отправила начальное событие нажатия. Можете ли вы подробнее рассказать о том, как я мог бы из метода событий определить индекс вкладки, откуда он был первоначально запущен?

2. Аргумент sender является ключевым. Приведите его обратно к кнопке с отправителем (Button).

Ответ №2:

Возможно, я чего-то не понимаю, но предполагая, что вы знаете иерархию элементов управления, при нажатии вы можете использовать отправителя в качестве кнопки (как предложил Ганс) и получить его родительский

 if(MyTabPa&e == (TabPa&e)((Button)sender).Parent)
  

Или получить родительский элемент родительского элемента

 if(MyTabPa&e == (TabPa&e)((Button)sender).Parent.Parent)
  

или как бы далеко вверх по иерархии вам ни нужно подняться, чтобы добраться до страницы вкладок и выяснить, на какой вкладке вы находитесь.