Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с TextBox. Диапазон вводимых значений

76K
17 января 2012 года
Konstantin2012
8 / / 14.01.2012
Здравствуйте, ещё раз, уважаемые форумчане! Я не могу решить одну проблему с Textbox. В программе в textBox необходимо вписывать определенные числовые значения. Вот сделанный мною пример:

Public A As Single
Public B As Single
Public C As Single

Private Sub Cmd1_Click()
rem ограничения для А
If Trim(txt1.Text) = "" Then
txt1.SetFocus
txt1_GotFocus
MsgBox "введите значение", vbInformation
Exit Sub
ElseIf (CLng(txt1.Text) < 1) Or (CLng(txt1.Text) > 9) Then
txt1.SetFocus
txt1_GotFocus
MsgBox "введите цифры от 1 до 9!", vbInformation
Exit Sub
End If

Rem ограничения для В
If Trim(txt2.Text) = "" Then
txt2.SetFocus
txt2_GotFocus
MsgBox "Введите значение", vbInformation
Exit Sub
ElseIf (CLng(txt2.Text) < -5) Or (CLng(txt2.Text) > 5) Then
txt2.SetFocus
txt2_GotFocus
MsgBox "Значение от -5 до 5!", vbInformation
Exit Sub
End If

Rem Обозначение переменных
A = Val(txt1.Text)
B = Val(txt2.Text)
Rem формула
C = (A + B) / 2
txt3.Text = Str(C)
End Sub

Rem ограничения для A

Private Sub txt1_keypress(KeyAscii As Integer)
txt1.MaxLength = 1
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then
KeyAscii = 0
End If
End Sub

Private Sub txt1_GotFocus()
txt1.SelStart = 0
txt1.SelLength = Len(txt1.Text)
End Sub

Private Sub txt1_Validate(Cancel As Boolean)
If Trim(txt1.Text) = "" Then
txt1_GotFocus
MsgBox "Введите значение", vbInformation
Cancel = True
Exit Sub
ElseIf (CLng(txt1.Text) < 1) Or (CLng(txt1.Text) > 9) Then
txt1_GotFocus
MsgBox "введите значение от 1 до 9", vbInformation
Cancel = True
Exit Sub
End If
End Sub

Rem ограничения для B

Private Sub txt2_KeyPress(KeyAscii As Integer)
txt2.MaxLength = 2
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 Then
KeyAscii = 0
End If
End Sub

Private Sub txt2_GotFocus()
txt2.SelStart = 0
txt2.SelLength = Len(txt1.Text)
End Sub

Private Sub txt2_Validate(Cancel As Boolean)
If Trim(txt2.Text) = "" Then
txt2_GotFocus
MsgBox "введите значение", vbInformation
Cancel = True
Exit Sub
ElseIf (CLng(txt2.Text) < -5) Or (CLng(txt2.Text) > 5) Then
txt2_GotFocus
MsgBox "Введите число от -5 до 5", vbInformation
Cancel = True
Exit Sub
End If
End Sub

Этот вариант не даёт возможности вводить значения со знаком "-" в txt2, а также я бы хотел чтобы после ввода числа в txt1 и нажатия клавиши enter, фокус перемещался на txt2 и после ввода данных в txt2 нажатием enter, фокус перемещался на Cmd1 и т.д. Каким должен быть этот код, чтобы была возможность вписывать в textbox только числовые значения (как положительные так и отрицательные) и была возможность перехода от одно textbox к другому с нажатием клавиши enter и чтоб при этом был определенный диапозон ввода данных (например только от 9 до 21)??? Я попытался сделать это в коде который я написал выше. У меня не получилось, мозгов не хватает, к тому же я не знаю константы клавиш.
277
17 января 2012 года
arrjj
1.7K / / 26.01.2011
Какая версия basic'а?
А spin box не подходит?
76K
17 января 2012 года
Konstantin2012
8 / / 14.01.2012
Visual basic 5.0 ))))
76K
17 января 2012 года
Konstantin2012
8 / / 14.01.2012
Я только начал осваивать бэйсик и все что я знаю я читаю на форумах, но у меня нет хорошего знания языков программирования. Теперь мне нужно сделать програмку небольшую с интерфейсом каким нибудь.
277
17 января 2012 года
arrjj
1.7K / / 26.01.2011
Ну тогда намекну на простой вариант:
у знака минус ascii - код 45 (keyCode 109 и 189 - если 45 не заработает)
разберетесь куда и как добавить?
76K
17 января 2012 года
Konstantin2012
8 / / 14.01.2012
Цитата: arrjj
Ну тогда намекну на простой вариант:
у знака минус ascii - код 45 (keyCode 109 и 189 - если 45 не заработает)
разберетесь куда и как добавить?


Проще не бывает!!!

Private Sub txt2_KeyPress(KeyAscii As Integer)
txt2.MaxLength = 3
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 And KeyAscii <> 45 Then
KeyAscii = 0
End If
End Sub

Большое спасибо!!!

275
17 января 2012 года
pashulka
985 / / 19.09.2004
Konstantin2012, Без обид, но проще, далеко не всегда означает правильно, ибо в Вашем случае во второе текстовое поле можно ввести, не только -1 , но 1-- и 1-5 и т.п.

В общем, не буду Вас агитировать ;) однако предложу глянуть (хотя бы одним глазом) на :

Код:
Private Sub Txt1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case 8, 48 To 57
        Case 13
           Txt1_Validate False
        Case Else
           KeyAscii = 0
    End Select
End Sub

Private Sub Txt1_Validate(Cancel As Boolean)
    Select Case Val(Txt1.Text)
        Case 9 To 21
           Txt2.SetFocus
        Case Else: Cancel = True
    End Select
End Sub

Private Sub Txt2_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case 8, 48 To 57
        Case 13
           Txt2_Validate False
        Case 45
           If Txt2.SelStart = 0 Then
              If Txt2.Text Like "-*" Then KeyAscii = 0
           Else
              KeyAscii = 0
           End If
        Case Else
           KeyAscii = 0
    End Select
End Sub

Private Sub Txt2_Validate(Cancel As Boolean)
    If Len(Txt2.Text) = 0 Then
       Cancel = True: Exit Sub
    End If
    Select Case Val(Txt2.Text)
        Case -5 To 5
           Cmd1.SetFocus
        Case Else: Cancel = True
    End Select
    'Select Case True
    '    ...
    'End Select
End Sub

Private Sub Cmd1_Click()
    Txt3.Text = (Val(Txt1.Text) + Val(Txt2.Text)) / 2
    'Txt3.Text = CStr((Val(Txt1.Text) + Val(Txt2.Text)) / 2)
End Sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог