Работа с активными контролами

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Работа с активными контролами

Сообщение Space » 26.01.2007 (Пт) 5:02

как определить, входит ли активный контрол Me.ActiveControl в массив контролов и как обращаться к контролу в Me.Controls, зная его имя Me.ActiveControl.Name и индекс Me.ActiveControl.Index?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.01.2007 (Пт) 8:10

Вопрос, а зачем это надо? Сформулируешь вопрос, возможно сам же и получишь ответ.
Весь мир матрица, а мы в нем потоки байтов!

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 26.01.2007 (Пт) 9:38

Сформулируешь вопрос, возможно сам же и получишь ответ.
Гы, так автор уже его сформулировал и получил)) все ответы есть в вопросе, который он задал
как определить, входит ли активный контрол Me.ActiveControl в массив контролов
проверить свойство index)
как обращаться к контролу в Me.Controls, зная его имя Me.ActiveControl.Name и индекс Me.ActiveControl.Index?
ну тут я даже не знаю что добавить, ответ сформулирован исчерпывающе :)
Человек рождён для того, чтобы достичь жизни...

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Работа с активными контролами

Сообщение Space » 26.01.2007 (Пт) 9:56

Space писал(а):как определить, входит ли активный контрол Me.ActiveControl в массив контролов и как обращаться к контролу в Me.Controls, зная его имя Me.ActiveControl.Name и индекс Me.ActiveControl.Index?


Обращение к Me.ActiveControl.Index при контроле, не входящем в массив, приводит к ошибке. Более правильного способа нет?

VB-constructor писал(а):ну тут я даже не знаю что добавить, ответ сформулирован исчерпывающе


Установи BackColor для Text1(0) неявным способом, если фокус на Text1(0).

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 26.01.2007 (Пт) 10:12

Если имя контрола уникальное (массива нет):
Код: Выделить всё
MsgBox Me.Controls("Text1").Text


Если имя не уникальное (массив контролов):
Код: Выделить всё
Dim s As Control

For Each s In Controls
    If s.Name = "Text1" And s.Index = 1 Then
        s.Text = "sss"
        Exit For
    End If
Next s

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 26.01.2007 (Пт) 14:05

Amed писал(а): If s.Name = "Text1" And s.Index = 1 Then


Я так полагаю, что этой строкой мы хотим сказать, что мы знаем, что Text1 является массивом контролов. А если это не массив, то мы получим ошибку на s.Index. Конечно, отловив ошибку, можно определить, что контрол не входит в массив, но нет ли более правильного способа? Мне не нужно перебирать все контролы, мне нужно всего лишь установить BackColor активному контролу TextBox, не зная заранее, входит он в массив или нет. Можно как-нибудь без перебора, напрямую обратиться, ведь нам уже известно Name и с горем пополам Index?

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 26.01.2007 (Пт) 14:10

Обращение к Me.ActiveControl.Index при контроле, не входящем в массив, приводит к ошибке. Более правильного способа нет?
хм, наверно ошибку ловить придется ((
Человек рождён для того, чтобы достичь жизни...

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 26.01.2007 (Пт) 14:15

Если имя не уникальное (массив контролов):

можно еще так, имхо легче :)
Код: Выделить всё
Me.Controls("Command1", 0).Caption = 1
Человек рождён для того, чтобы достичь жизни...

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Сообщение Space » 26.01.2007 (Пт) 15:13

VB-constructor писал(а):
Если имя не уникальное (массив контролов):

можно еще так, имхо легче :)
Код: Выделить всё
Me.Controls("Command1", 0).Caption = 1


вот, это то, что нужно! Премного благодарен. А как можно узнать, какие существуют параметры у Me.Controls (всплывающей подсказки нет)? А то я знал, что можно имя контрола указывать, а про индекс через запятую и не догадывался :)

Осталось узнать способ выявления принадлежности (или нет) контрола к массиву без
On Error GoTo err1
i = Me.ActiveControl.Index

Кто чего знает? Пишите.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 26.01.2007 (Пт) 17:03

Код: Выделить всё
Dim ctl As Control
   
    For Each ctl In Me.Controls
'        Debug.Print TypeName(Me.Controls(ctl.Name))
        If VBA.VarType(Me.Controls(ctl.Name)) = vbObject Then
            Debug.Print ctl.Name & "(" & ctl.Index & ")"
        Else
            Debug.Print ctl.Name
        End If
    Next


сложные формы не проверял, на простых вроде будет работать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 98

    TopList