Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить коллекцию всех контролов на форме? 
V
    Опции темы
xXxSataNxXx
Дата 31.7.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 25.12.2009

Репутация: 1
Всего: 1



Реально ли получить коллекцию всех контролов на форме? Включая те, которые находятся в панелях и гроупбоксах?
Что нить типо for each c as control in .....
Но не прибегая к таком зацикливанию

Код

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Get_Item(Me)
    End Sub

    Private Sub Get_Item(ByVal Obj As Object)
        For Each a In Obj.controls
            ListBox1.Items.Add(a.name)
            If TypeName(a) = "Panel" Or TypeName(a) = "GroupBox" Then Get_Item(a)
        Next
    End Sub

И как узнать, на какой форме находится тот или иной объект?

Это сообщение отредактировал(а) xXxSataNxXx - 31.7.2010, 19:29
PM MAIL   Вверх
diadiavova
Дата 31.7.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(xXxSataNxXx @  31.7.2010,  20:05 Найти цитируемый пост)
Но не прибегая к таком зацикливанию

Почему нет? Не самое лучшее решение, но принцип именно такой - контролы обходятся рекурсивно. Можно еще так. Передаешь функции форму или другой контрол, она возвращает коллекцию контролов
Код

Function GetAllControls(ByVal c As Control) As List(Of Control)
    GetAllControls = New List(Of Control)
    For Each ctrl As Control In c.Controls
        GetAllControls.AddRange(GetAllControls(ctrl))
    Next
End Function
Но принцип тот же.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xXxSataNxXx
Дата 31.7.2010, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 25.12.2009

Репутация: 1
Всего: 1



А нет такого, чтоб просто получить все контролы, не прибегая к таким образам?
А как можно сделать такую фичу, как, например, у КомбоБокс (Список выпадения поверх всех контролов)?
Если контрол добавить в панель, то при прорисовки списка надо увеличивать размер контрола(высоту), а часть, которая будет выходить за высоту панели, она не отображается... А как её отобразить?
PM MAIL   Вверх
diadiavova
Дата 31.7.2010, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(xXxSataNxXx @  31.7.2010,  23:30 Найти цитируемый пост)
А нет такого, чтоб просто получить все контролы, не прибегая к таким образам?

А чем такой способ плох?  smile 
Цитата(xXxSataNxXx @  31.7.2010,  23:30 Найти цитируемый пост)
А как можно сделать такую фичу, как, например, у КомбоБокс (Список выпадения поверх всех контролов)?

Винформовские контролы - это обертки для системных контролов. Там возможности сильно ограничены. Хочешь свободы действий - WPF тебе в руки.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xXxSataNxXx
Дата 1.8.2010, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 25.12.2009

Репутация: 1
Всего: 1



Цитата(diadiavova @  31.7.2010,  22:43 Найти цитируемый пост)
А чем такой способ плох?  smile 

В принципе не плох, просто я думал, что можно одной строкой загнать все контролы с формы в коллекцию, вот и спросил...smile

Это сообщение отредактировал(а) xXxSataNxXx - 1.8.2010, 02:21
PM MAIL   Вверх
diadiavova
Дата 1.8.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(xXxSataNxXx @  1.8.2010,  03:19 Найти цитируемый пост)
В принципе не плох, просто я думал, что можно одной строкой загнать все контролы с формы в коллекцию, вот и спросил...

Кто мешает прикрутить метод-расширитель к контролам и делать одной строкой?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.