Как передать массив элементов управления в процедуру?

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

Как передать массив элементов управления в процедуру?

Сообщение AndreyG_80 » 15.07.2006 (Сб) 21:24

Всем доброго времени суток.
Что-то у меня не получаеться передать массив элементов управления в процедуру.
Вот пример:
У меня есть массив элементов управления Label. Я хочу его обработать в модуле, но ни как не могу передать в процедуру весь массив.
Обработка события MouseMove для контролов массива
Код: Выделить всё
Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    MouseMove Label1 , Index
End Sub


Процедура находящаяся в модуле
Код: Выделить всё
Public Sub MouseMove(Control As Label, Index As Integer)
    For i = 0 To Control.Count - 1
        Control.Item(i).BorderStyle = vbBSNone
    Next i
        Control.Item(Index).BorderStyle = vbFixedSingle
End Sub


Подскажите пожалуста, в каком месте кода я торможу, при обьявлении "Control As Label" или при передаче параметра в прочедуру?

Заранее длагодарен за помощь

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.07.2006 (Сб) 22:28

Код: Выделить всё
Public Sub MouseMove(ByVal Control As Object, ByVal Index As Integer)
  Dim i As Long
   
  For i = 0 To Control.Count - 1
    Control(i).BorderStyle = vbBSNone
  Next

  Control(Index).BorderStyle = vbFixedSingle
end sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AndreyG_80
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 169
Зарегистрирован: 10.03.2006 (Пт) 13:27

Сообщение AndreyG_80 » 15.07.2006 (Сб) 23:18

Большое спасибо,
все оказалось так просто, аж стыдно, что я так затупил :oops:

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Как передать массив элементов управления в процедуру?

Сообщение Andrey Fedorov » 17.07.2006 (Пн) 16:42

И чуть по другому:

Код: Выделить всё
Private Sub lb_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    MouseMove lb, Index
End Sub

Public Sub MouseMove(ml As Object, Index As Integer)
    Dim l As Label
    For Each l In ml
        l.BorderStyle = IIf(l.Index = Index, vbFixedSingle, vbBSNone)
    Next l
End Sub


Ну и совсем по рабоче-крестьянски, без функции MouseMove:

Код: Выделить всё
Private Sub lb_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim l As Label
    For Each l In lb
        l.BorderStyle = IIf(l.Index = Index, vbFixedSingle, vbBSNone)
    Next l
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 17:05

А можно ещё компактнее и быстрее:

Код: Выделить всё
Private Sub lb_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    For i = lb.LBound To lb.UBound
       lb(i).BorderStyle=Abs(i=Index):Next i
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 17.07.2006 (Пн) 17:43

А можно ещё компактнее и быстрее:
И неправильнее... :?
Следует писать:
Код: Выделить всё
For each i in lb
       i.BorderStyle=Abs(i.index=Index)
Next
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.07.2006 (Пн) 21:43

Abs(i.index=Index)

Это называется "я полагаюсь на числовое значение констант", что, в целом, равнозначно "Да какой я, нафиг, программист, так, мимо проходил".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 17.07.2006 (Пн) 21:47

Знешь что GSerg. если у тебя есть желание наехать на кого нибудь, то для этого есть специальные форумы.

Что? Ты хочешь сказать, значение этой константы изменится? Когда? В следующей версии? Которой уже никогда не будет?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 120

    TopList