определить индекс

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

определить индекс

Сообщение Naked » 23.08.2005 (Вт) 4:35

опеределить индекс контрола в массиве не прибегая к:
Private Sub Text1_Change(Index As Integer)
Private Sub Text1_GotFocus(Index As Integer)
и т.д т.п

узнать его надо в обработчике сообщений т.е в модуле, по сообщению Case WM_SETFOCUS зная hwnd

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

Сообщение GSerg » 23.08.2005 (Вт) 6:47

Потрясающе!
Вопрос наконец-то задан в форме, в которой на него можно ответить! Ура.

Код: Выделить всё
dim f as form, c as control, h as long
h=GetParent(hwnd)
for each f in forms
  if f.hwnd = h then
    for each c in f.controls
      if c.hwnd = hwnd then
        msgbox c.index
        exit for
      end if
    next
    exit for
  end if
next
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 23.08.2005 (Вт) 7:22

а че оно не работает??? :lol:

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

Сообщение GSerg » 23.08.2005 (Вт) 9:02

Видимо потому, что это идея, а не готовое и прожаренное?
Видимо потому, что ты и не пытался сам понять, почему оно не работает?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 23.08.2005 (Вт) 9:20

if c.hwnd = hwnd then в модуле дает ошибку, пишет что "с" не поддерживает это св-во "hwnd"

в модуле формы работает нормально если убрать все что выделено красным

dim f as form, c as control, h as long
h=GetParent(hwnd)
for each f in forms
if f.hwnd = h then
for each c in f.controls
if c.hwnd = hwnd then
msgbox c.index
exit for
end if
next
exit for
end if
next

т.е сделать так

shWnd = ..... hwnd для сравнения

For Each f In Forms
For Each c In f.Controls
If c.hWnd = shWnd Then
MsgBox c.Index
Exit For
End If
Next
Exit For
Next

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 23.08.2005 (Вт) 10:27

Naked

Ну вот тебе для тукущей формы без АПИ:

Код: Выделить всё
Dim c As Control
For Each c In Me.Controls
    MsgBox c.Index
Next


Но работает только для массивов элементов, с не массивами выдаст ошибку, обрабатывай её сам.
Программисты не глючат - глючат компиляторы...


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

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

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

    TopList