Или Like не работает, или мозги

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

Или Like не работает, или мозги

Сообщение Osteon » 22.03.2016 (Вт) 11:02

Здравствуйте всем.
В событии LostFocus текстового поля сделал автоматический ввод слова с большой буквы. Поле находится на первой вкладке SSTab

Код: Выделить всё
With txtPasp(Index)
    '***************
    ElseIf Index Like "[0-5, 9]" Then
       If Trim(.Text) <> "" Then .Text = UCase(Mid(.Text, 1, 1)) & Right(.Text, Len(.Text) - 1)
    '***************
End With

В таком виде все работает. Добавил еще вкладку на SSTab, новые поля с тем же именем, но с другими индексами.

Код: Выделить всё
ElseIf Index Like "[0-5, 9, 19-21, 24, 28]" Then

Теперь поля с индексами 0-5 и 9 видит, а остальные нет...

Может, я не знаю чего?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Или Like не работает, или мозги

Сообщение ger_kar » 22.03.2016 (Вт) 11:33

Ну во первых сделано не просто не правильно, а абсолютно неправильно!
Like служить прежде всего для сравнения на соответствие строк определенному шаблону, а в данном примере идет отборка индексов, т.е. числовых значений. Даже тот пример, который работает, для сравнения использует вагон ненужных операций, в т.ч. и неявное преобразование числовых значений в строки. Поэтому так никто не должен делать - это дурная практика.
Для того, что-бы сделать отбор по индексам самый нормальный вариант использовать конструкцию Select Case ... End Select и первый пример переписать например так:
Код: Выделить всё
With txtPasp(Index)
    '***************
    Select Case Index
        Case 0 To 5, 9
            If Trim(.Text) <> "" Then .Text = UCase(Mid(.Text, 1, 1)) & Right(.Text, Len(.Text) - 1)
    End Select
    '***************
End With
Бороться и искать, найти и перепрятать

Osteon
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 17.01.2013 (Чт) 5:53

Re: Или Like не работает, или мозги

Сообщение Osteon » 22.03.2016 (Вт) 11:57

Значит, не работают все-таки мозги. :oops: Я с "детства" привык пользовать ElseIf, потому и пошел по этому пути. А Like воткнул - типа, я крутой программер. :roll: Спасибо за вразумление, буду переписывать код... :)

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

Re: Или Like не работает, или мозги

Сообщение Хакер » 23.03.2016 (Ср) 2:24

К тому же, дался вам этот LostFocus, если для этой цели есть специальное событие Validate
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

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

    TopList