Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: domkratt.com
 Профиль | | #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-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 22.12.07 23:32
А цикл по i то ты зачем сделал?=) 10 раз проверяешь для надежности?)))

Выделяет числа на даблклик:
Dim sel As Long
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
Option Explicit
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-сайт: domkratt.com
 Профиль | | #8
Добавлено: 23.12.07 11:05
еще добавь проверку, чтоб можно было ввести в каждый сегмент число не больше 255 и будет вообще почти замечательно :)

Ответить

Номер ответа: 9
Автор ответа:
 Vitaliy



Вопросов: 1
Ответов: 5
 Профиль | | #9 Добавлено: 23.12.07 12:59
Да согласен было бы хорошо, но может это сильно увеличит код?!

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 23.12.07 13:11
ну это смотря как организовать проверку

Ответить

Номер ответа: 11
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #11
Добавлено: 23.12.07 13:40
итого мы имеем (с оптимизацией):
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 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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам