Страницы: 1
RSS
обработка программно созданных элементов управления
 
Здравствуйте уважаемые эксперты.  
Вот какая проблема. Программно создаются текстовые поля, чекбоксы, комбобоксы (управляющие элементы) для ввода информации о группах людей. Количество людей в группах динамическое, потому управляющие элементы нумеруются мной как ФамилияTextBox1....ФамилияTextBox8, ИмяTextBox1....ИмяTextBox8 и т.д. События перехватываются в коде модуля класса. Вопрос: как правильно обработать эти элементы, например присвоить содержание этих элементов переменным для дальнейшего использования этих переменных в разных участках кода?
 
Посмотрите тут http://www.planetaexcel.ru/forum.php?thread_id=18746
 
{quote}{login=Казанский}{date=28.09.2010 04:56}{thema=}{post}Посмотрите тут http://www.planetaexcel.ru/forum.php?thread_id=18746{/post}{/quote}  
 
отличный пример, но в нем как раз начало моего вопроса. ТекстБоксы сформированы и являются элементами динамических массивов. Теперь нужно перехватить событие (TextBox_Change) и считать текст из полей. а вот как? и как эти значения присвоить соответствующим переменным?
 
Здравствуйте!  
Открываете прилагаемый файл. На единственном листе - текстбокс. Введите в него чего-нить и посмотрите, что получится.  
Когда надоест, включаете режим конструктора (на панели инструментов "Макросы"), выделяете мышом объект (текстбокс), правой клавишей - клац, - в контекстном меню выбираете "исходный текст".  
 
Это для элемента управления, внедренного на лист.  
Если элемент на пользовательской форме - то открываете редактор VBE (Alt+F11), слева вверху ищете список объектов, в ней находите UserForm, на ней, в свою очередь, находите нужный текстбокс - правой клавишей КЛАЦ, выбираем View Code.  
 
Процедура, отслеживающая изменение в элементе и в том, и в другом случае -одинаковые, разница в том, где пишется код процедуры - в объекте Лист, или в объекте UserForm.
Кому решение нужно - тот пример и рисует.
 
Здравствуйте Пытливый.  
Я не очень хорошо пока владею VBA, но не ставил ник Дремучий. Как сформировать Sub на изменение элемента я знаю, но это для "рукодельного" элемента. А если контрол сформирован программно и является элементом массива?
 
Казанский во втором посте привел хороший пример. В форме примера есть незадействованная кнопка ВВОД. Как должен выглядеть код для Sub CommandButton1_Click() чтоб например значения, введенные в сформированные ТекстБоксы были считаны и выведены в Лейблы чуть правее?
 
Peter у вас текстбоксы ваши "создаваемые программно" имена имеют?  
Что мешает понаписать кучу процедур вида:  
Sub TextBox_Change()  
ПеременнаяМояСтроковая (или элемент массива) = TextBox(ИМЯ текстбокса).text  
End Sub  
???  
Или я опять задачу неправильно понял?
Кому решение нужно - тот пример и рисует.
 
Каждый ТекстБокс - элемент массива. Вот код:  
       ReDim Preserve aTbx(i)  
       Set aTbx(i) = Frame1.Controls.Add("Forms.textbox.1", , True)  
       With aTbx(i)  
           .Top = LABEL_TOP + H_STEP * (i - 1)  
           .Width = TEXTBOX_WIDTH  
           .Height = LABEL_HEIGHT  
           .Left = TEXTBOX_LEFT  
       End With  
Вы хотите сказать, что можно сделать процедуру  
       Sub aTbx1_Click  
и операцию типа aTbx1.Value =    
с элементом массива? У меня не получается.
 
Посмотрите здесь: http://www.planetaexcel.ru/forum.php?thread_id=9997 http://www.planetaexcel.ru/forum.php?thread_id=17262 может что и пригодится.
 
{quote}{login=Юрий М}{date=28.09.2010 10:46}{thema=}{post}Посмотрите здесь: http://www.planetaexcel.ru/forum.php?thread_id=9997 http://www.planetaexcel.ru/forum.php?thread_id=17262 может что и пригодится.{/post}{/quote}  
 
Прочитал рекомендацию уважаемого ZVI, что лучше просто заготовить несколько десятков контролов и спрятать их до момента надобности... так и поступлю, иначе голова сломается. Спасибо ЮрийМ.
 
Ну вот, а меня понесло вот сюда http://msoffice.nm.ru/faq/macros/module.htm#faq50  
и увиделась апокалиптическая картина, как в зависимости от количества создаваемых элементов управления правится текст VBA проекта в соответствующем элементе проекта используя .Name элемента при зацикливании процесса...  
Короче, бред. ZVI предложил лучше.
Кому решение нужно - тот пример и рисует.
 
ZVI плохого не посоветует :-)
 
О хороших советах :-)  
Я спросил у мудрейшего: что ты извлёк из своих манускриптов?  
Мудрейший изрёк: счастлив тот, кто с красавицей нежной по ночам от премудростей книжных далёк.  
(Гиясаддин Абу-ль-Фатх Омар ибн Ибрахим аль-Хайям Нишапури)
 
{quote}{login=Юрий М}{date=28.09.2010 10:46}{thema=}{post}Посмотрите здесь: http://www.planetaexcel.ru/forum.php?thread_id=9997 http://www.planetaexcel.ru/forum.php?thread_id=17262 может что и пригодится.{/post}{/quote}  
 
Юрий, очень помог ваш пример с обработкой контролов, как элемента массива. Почти все сделал, но вот натолкнулся на такой вопрос: у меня 15 кнопок для вызова календаря CalendarButton1... CalendarButton15. Как реализовать процедуру обработки события CalendarButton_Click, а не 15 процедур?
 
Скорее всего Вы говорите не о моём файле :-) А по поводу 15-ти кнопок - Вам ведь в любом случае нужно отслеживать нажатие на конкретную кнопку. Календарей, надеюсь, не 15? :-))
 
{quote}{login=Юрий М}{date=29.09.2010 02:36}{thema=}{post}Скорее всего Вы говорите не о моём файле :-) А по поводу 15-ти кнопок - Вам ведь в любом случае нужно отслеживать нажатие на конкретную кнопку. Календарей, надеюсь, не 15? :-)){/post}{/quote}  
Неее, Календарь - стандартная функция :)). То есть ловить нажатие всех 15 кнопок однозначно?.... Блин.
 
Не очень понимаю. По кнопки на самом календаре? Вы про какой конкретно файл говорите?
 
{quote}{login=Юрий М}{date=29.09.2010 03:26}{thema=}{post}Не очень понимаю. По кнопки на самом календаре? Вы про какой конкретно файл говорите?{/post}{/quote}  
в файле фотография, я сформировал на форме по 15 элементов, которые благополучно скрываю до определения количества человек в группе...
 
Peter, а зачем там вообще кнопки? Используйте вызов календаря по MouseUp.
 
Peter, кажется, я понял суть Вашей проблемы: Вам нужно использовать модуль класса. Посмотрите по этой ссылке: http://www.planetaexcel.ru/forum.php?thread_id=14473 Там The_Prist выкладывал подходящий пример.
 
Спасибо Юрий. С Дмитрием я уже консультировался по этому вопросу на его форуме. Разбирался несколько дней, но в некоторых деталях так и не разобрался. Кстати например вот в форме обращения к элементу массива aoTxtBxes(i).oTxtBx.Value = ... (теперь понятно). Поскольку у меня не так много было элементов, плюнул и обрабатывал в ручную. Но чую скоро снова к этому вопросу обращусь. В любом случае великое спасибо Вам и Дмитрию (за терпение). :)
Страницы: 1
Читают тему
Наверх