Поиск подстроки в cmbBox'e и регистр

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

Поиск подстроки в cmbBox'e и регистр

Сообщение netfrog » 16.04.2003 (Ср) 12:37

Вроде должно работать и рабает, но если не соответствует регистр символов, то не хотит :( можно как нить объехать ????
Код: Выделить всё
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long

Private Sub Form_Load()
Combo1.AddItem "ааа"
Combo1.AddItem "ббб"
Combo1.AddItem "ВВВВ"
End Sub

Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim st As Long
If KeyCode <> vbKeyReturn And KeyCode <> vbKeyBack And KeyCode <> vbKeySpace Then
st = Len(Combo1.Text)
If st < 3 Then
For X = 0 To Combo1.ListCount - 1
If Left(Combo1.List(X), st) = Combo1.Text Then
Combo1.ListIndex = X
Combo1.SelStart = st
Combo1.SelLength = Len(Combo1.Text) - st
Exit For
End If
Next X
End If
End If
End Sub
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 16.04.2003 (Ср) 12:39

я бы объехал примерно так:

Код: Выделить всё
If LCase(Left(Combo1.List(X), st)) = LCase(Combo1.Text) Then


или вообще так:

Код: Выделить всё
If Left(Combo1.List(X), st) LIKE Combo1.Text Then

netfrog
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 27.06.2002 (Чт) 17:23
Откуда: Russia

Сообщение netfrog » 16.04.2003 (Ср) 12:47

Like я тоже попробовал, не помогает, а первый вариант - самое то.
Спасибо :)
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.04.2003 (Ср) 14:19

Или в декларации напиши
Код: Выделить всё
Option Compare Text


Но еще лучше искать при помощи API SendMessage hWnd, CB_FINDSTRING, ?, ?
Lasciate ogni speranza, voi ch'entrate.

netfrog
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 27.06.2002 (Чт) 17:23
Откуда: Russia

Сообщение netfrog » 16.04.2003 (Ср) 15:27

чем лучше, ну и пример в студию :)
=================
Ничто так не ограничивает полет мысли программиста, как компилятор :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.04.2003 (Ср) 15:51

Ну примерно так:
Код: Выделить всё
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const CB_FINDSTRING As Long = &H14C&

...

Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim st As Long, I As Long
If KeyCode <> vbKeyReturn And KeyCode <> vbKeyBack And KeyCode <> vbKeySpace Then
  st = Len(Combo1.Text)
  If st < 3 Then
    I = SendMessage(Combo1.hWnd, CB_FINDSTRING, ByVal 1&, ByVal (Combo1.Text & Chr$(0)))
    If I => 0 Then
      Combo1.ListIndex = I
      Combo1.SelStart = st
      Combo1.SelLength = Len(Combo1.Text) - st
    End If
  End If
End If
End Sub


Только это... не проверял я. Но должно работать.
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 92

    TopList