Страница: 1 |
Страница: 1 |
Вопрос: Текстовое поле для ввода IP адреса
Добавлено: 22.12.07 14:34
Автор вопроса: Vitaliy
Вот нашел решение одной задачки и решил поделится.Я знаю что есть специальные контролы для этих целей но зачем если решение на самом деле очень просто. Может кому то станет интересно как же сделать текстовое поле для ввода IP адреса та вот привожу пример:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Len(Text1.Text) = 3 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
If Len(Text1.Text) = 7 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
If Len(Text1.Text) = 11 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
Text1.MaxLength = 15
End Sub
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 22.12.07 14:49
Даже в теории не может нормально работать Видно даже без проверк. Попробуй потом стереть твой IP-адрес оттуда...
Номер ответа: 2
Автор ответа:
Vitaliy
Вопросов: 1
Ответов: 5
Профиль | | #2
Добавлено: 22.12.07 21:46
Спасибо за замечание. Сразу хочу рассказать что я не профессиональный програмер и эта тема рассчитана скорей для таких же новичков как я, так что я очень рад что вы будете делать дополнения в этот код.
Номер ответа: 3
Автор ответа:
Vitaliy
Вопросов: 1
Ответов: 5
Профиль | | #3
Добавлено: 22.12.07 22:33
Вот уже немного модернизировал
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode <> 8 Then
If KeyCode <> 46 Then
For i = 1 To 10
If Len(Text1.Text) = 3 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
If Len(Text1.Text) = 7 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
If Len(Text1.Text) = 11 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
Text1.MaxLength = 15
Next i
End If
End If
End Sub
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 22.12.07 23:32
А цикл по i то ты зачем сделал? 10 раз проверяешь для надежности?)))
Выделяет числа на даблклик:
Private Sub Text1_Click()
sel = Text1.SelStart
End Sub
Private Sub Text1_DblClick()
Text1.SelStart = InStrRev(Text1, ".", sel)
Text1.SelLength = 3
End Sub
Номер ответа: 5
Автор ответа:
Vitaliy
Вопросов: 1
Ответов: 5
Профиль | | #5
Добавлено: 23.12.07 00:57
Это я случайно!!! )))
Номер ответа: 6
Автор ответа:
Vitaliy
Вопросов: 1
Ответов: 5
Профиль | | #6
Добавлено: 23.12.07 01:02
Вот исправляю свою ошибку:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode <> 8 Then
If KeyCode <> 46 Then
If Len(Text1.Text) = 3 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
If Len(Text1.Text) = 7 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
If Len(Text1.Text) = 11 Then
Text1.Text = Text1.Text + "."
Text1.SelStart = Len(Text1.Text) + 1
End If
Text1.MaxLength = 15
End If
End If
End Sub
Может кто-то знает как сделать чтоб в TextBox вводились только цифры?
Номер ответа: 7
Автор ответа:
Semicolon
Вопросов: 2
Ответов: 5
Профиль | | #7
Добавлено: 23.12.07 09:49
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Dim l As Long
Dim r As Long
l = GetWindowLong(Text1.hwnd, GWL_STYLE)
r = SetWindowLong(Text1.hwnd, GWL_STYLE, l Or ES_NUMBER) 'только цифры
Номер ответа: 8
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #8
Добавлено: 23.12.07 11:05
еще добавь проверку, чтоб можно было ввести в каждый сегмент число не больше 255 и будет вообще почти замечательно
Номер ответа: 9
Автор ответа:
Vitaliy
Вопросов: 1
Ответов: 5
Профиль | | #9
Добавлено: 23.12.07 12:59
Да согласен было бы хорошо, но может это сильно увеличит код?!
Номер ответа: 10
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #10
Добавлено: 23.12.07 13:11
ну это смотря как организовать проверку
Номер ответа: 11
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #11
Добавлено: 23.12.07 13:40
итого мы имеем (с оптимизацией):
Const ES_NUMBER = &H2000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Dim sel As Integer
Private Sub Form_Load()
Dim dwLong As Long
dwLong = GetWindowLong(Text1.hwnd, GWL_STYLE)
Call SetWindowLong(Text1.hwnd, GWL_STYLE, dwLong Or ES_NUMBER)
Text1.MaxLength = 15
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode = 8) Or (KeyCode = 46) Then Exit Sub
Select Case Len(Text1.Text)
Case 3, 7, 11
Text1.Text = Text1.Text & "."
Text1.SelStart = 15
End Select
End Sub
Private Sub Text1_Click()
sel = Text1.SelStart
End Sub
Private Sub Text1_DblClick()
If sel = 0 Then Exit Sub
Text1.SelStart = InStrRev(Text1, ".", sel)
Text1.SelLength = 3
End Sub