Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 | 3 |

 

  Вопрос: Проверка заполнения всех полей формы. Добавлено: 01.05.07 14:37  

Автор вопроса:  fuzytsfcrew | Web-сайт: video-edit.com.ua | ICQ: 314339 

Ответить

  Ответы Всего ответов: 45  

Номер ответа: 16
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #16
Добавлено: 02.05.07 11:44
Он говорил-3

Ответить

Номер ответа: 17
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #17
Добавлено: 02.05.07 14:08
текстбоксов у меня будет пока-что 3, но в дальнейшем не менее 28...
Спасибо за исправление для точки...
а с MaxLength я вроде разобрался -

Command1.Enabled = (Len(Text1.Text) = Text1.MaxLength) And (Len(Text2.Text) = Text2.MaxLength) And (Len(Text3.Text) = Text3.MaxLength)

Ответить

Номер ответа: 18
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #18
Добавлено: 02.05.07 14:09
с постом 7 что-то непонятно...
пока что для меня это слишком "закрученно", как бы не запутаться.

Ответить

Номер ответа: 19
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #19
Добавлено: 02.05.07 15:56
Private Sub doc()
If Text1.Text <> "" And Text2.Text <> "" And Text3.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub

Private Sub Text1_Change()
doc
End Sub

Private Sub Text2_Change()
doc
End Sub

Private Sub Text3_Change()
doc
End Sub

А вот и пример
Положи три textboxa на форму и 1 кноку

Ответить

Номер ответа: 20
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #20
Добавлено: 02.05.07 16:08
Command1.Enabled = (Len(Text1.Text) = Text1.MaxLength) And (Len(Text2.Text) = Text2.MaxLength) And (Len(Text3.Text) = Text3.MaxLength)

ти пишеш ето в каждий textbox&

Ответить

Номер ответа: 21
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #21
Добавлено: 02.05.07 16:18
?

Ответить

Номер ответа: 22
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #22
Добавлено: 02.05.07 17:19
конечно в каждый.

Есть еще один способ ввода только цифр, но он работает немного по другому принципу:

Private Sub Form_Load()
    ' =========================================================================================================
    ' Определяем строку шаблон для оператора Like.
    ' Для примера показан шаблон, определяющий недопустимыми символами все символы,
    ' кроме цифровых символов, F и G:
    ' =========================================================================================================
    StrPattern = "[!0-9FG]"
End Sub

Private Sub Text1_Change()
    ' =========================================================================================================
    ' При любом изменении текста в текстовом поле просматриваем этот текст
    ' и, если есть недопустимые символы, удаляем их.
    ' =========================================================================================================
    Text1 = SymbolReplace(Text1, StrPattern)
    ' Устанавливаем курсор в конец текста.
    Text1.SelStart = Len(Text1)
End Sub

Public Function SymbolReplace(ByVal StrSource As String, ByVal StrPattern As String)
    ' =========================================================================================================
    ' Функция SymbolReplace. Удаление символов входной строки, не удовлетворяющих шаблону.
    ' ---------------------------------------------------------------------------------------------------------
    ' Алгоритм основан на посимвольном просмотре строки и сравнении с шаблоном с помощью функции Like.
    ' Удаление производится путем выделения недопустимого символа и замены его пустой строкой "".
    ' Если вводимый символ недопустим, подается звуковой сигнал.
    ' Аргументы:
    ' StrSource     - строка-источник, в которой требуется произвести замену символов.
    ' StrPattern    - строка-шаблон для функции Like, с помощью которой определяются допустимые символы.
    ' Автор: Sovnik, 1 мая 2007 г.
    ' =========================================================================================================
    Dim Symbol As String
    Dim i As Long
    Dim N As Long
    
    ' Получаем число символов в строке-источнике StrSource.
    N = Len(StrSource)
    ' Просматриваем посимвольно строку-источник StrSource.
    For i = 1 To N
        ' Находим очередной символ и его позицию.
        Symbol = Mid$(StrSource, i, 1)
        ' Сравниваем найденный символ с шаблоном с помощью оператора Like.
        If Symbol Like StrPattern Then
            ' Если найденный символ недопустим, находим его во входной строке и заменяем на "".
            StrSource = Left$(StrSource, i - 1) & "" & Mid$(StrSource, i + 1)
            ' Подаем звуковой сигнал.
            Beep
        End If
    Next i
    SymbolReplace = StrSource
End Function

Ответить

Номер ответа: 23
Автор ответа:
 Docal



ICQ: 408802757 

Вопросов: 14
Ответов: 126
 Web-сайт: Doc-source.pp.net.ua
 Профиль | | #23
Добавлено: 02.05.07 18:10
конечно в каждый.

Ты себе представ што в тебя получитса за код если ты покладеш в все 28 такое
Используй как говорит Docal- умный чуквак, он прав нада вызывать функцыю котораю бы проверяла все ето дело.
Private Sub Doc()
Command1.Enabled = (Len(Text1.Text) = Text1.MaxLength) And (Len(Text2.Text) = Text2.MaxLength) And (Len(Text3.Text) = Text3.MaxLength)
End Sub

Private Sub Text1_Change()
Doc
End Sub

Private Sub Text2_Change()
Doc
End Sub

Private Sub Text3_Change()
Doc
End Sub

Ответить

Номер ответа: 24
Автор ответа:
 Docal



ICQ: 408802757 

Вопросов: 14
Ответов: 126
 Web-сайт: Doc-source.pp.net.ua
 Профиль | | #24
Добавлено: 02.05.07 18:12
Извиняюсь перепутал
З [CODE]

Ответить

Номер ответа: 25
Автор ответа:
 Retupa



Вопросов: 1
Ответов: 51
 Профиль | | #25 Добавлено: 02.05.07 18:26
Есть еще один способ ввода только цифр, но он работает немного по другому принципу:

Вот тебе ещё способ до кучи
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = IIf(Chr$(KeyAscii) Like "#", KeyAscii, 0)
End Sub

Ответить

Номер ответа: 26
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #26 Добавлено: 02.05.07 20:00
Вот это точно работает, Выделяеш свое текстбоксы и всем устанавлюеш Tag = "Text" и все

Private Sub TextFull(chr As Byte)
    For ind = 0 To Form1.Controls.Count - 1
        If Form1.Controls(ind).Tag = "Text" Then
                ;D = D + Len(Form1.Controls(ind).Text)
                'F = F + Form1.Controls(ind).MaxLenght
        End If
    Next
    If chr = 8 Then
         Command7.Visible = False
         Exit Sub
    End If
'************************************
    If D + 1 = 17 Or D = 17 Then   '17=syma vsix MaxLenght tvoix TextBoxov  
        Command7.Visible = True
    Else
        Command7.Visible = False
    End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
'****kolu vvodumo tsufru komu abo steraemo ***************
        If KeyAscii = 8 Or KeyAscii = 46 Or (KeyAscii > 47 And KeyAscii < 58) Then
        TextFull (KeyAscii)
        Exit Sub
    End If
'****kolu inwi sumvolu to ne vvodnmo i zvyk****
    KeyAscii = 0
    Beep
End Sub

Ответить

Номер ответа: 27
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #27
Добавлено: 02.05.07 20:21
текстбоксов у меня будет пока-что 3, но в дальнейшем не менее 28...

Если количество контролов заранее неизвестно или является астрономическим числом, то советую юзать такой код:

Форма:
Private Sub Form_Load()
HookForm Me, Command1
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnHookForm Me
End Sub


Модуль:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_COMMAND = &H111
Private Const GWL_WNDPROC = (-4)
Private PrevProc As Long
Private FormObject As Form
Private CommandObject As CommandButton
Private Checking As Boolean

Public Sub HookForm(FormObj As Form, Button As CommandButton)
Set FormObject = FormObj
Set CommandObject = Button
PrevProc = SetWindowLong(FormObject.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHookForm(FormObject As Form)
SetWindowLong FormObject.hwnd, GWL_WNDPROC, PrevProc
End Sub

Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Checking = True Then
    WindowProc = 0
    Exit Function
End If
If uMsg = WM_COMMAND Then CheckInfo
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
End Function

Public Sub CheckInfo()
Checking = True
On Error GoTo e
For i = 0 To FormObject.Controls.Count - 1
    If FormObject.Controls(i).Text = "" Then
        CommandObject.Enabled = False
        Checking = False
        Exit Sub
    End If
e:
Next i
CommandObject.Enabled = True
Checking = False
End Sub


Никаких тегов вписывать на надо и в событиях контролов тоже ничего не надо писать. Просто вставляй нужное число текстбоксов и комбобоксов.

Если тебе нужно проверять символы - это тоже можно сделать в процедуре CheckInfo.
Будут вопросы - обращайся :)

Ответить

Номер ответа: 28
Автор ответа:
 fuzytsfcrew



ICQ: 314339 

Вопросов: 30
Ответов: 102
 Web-сайт: video-edit.com.ua
 Профиль | | #28
Добавлено: 03.05.07 10:30
Народ, а как при достижении MaxLength в textbox автоматичесски переходить в следуюший? У меня в text1.text MaxLength стоит 4. Я добавляю такую строчку:

If Text1.Text = Text1.MaxLength Then Text2.SetFocus

Запускаю, и у меня при вводе первого же символа курсор перескакивает в следующий textbox! Где лажа?

Полный код для text1 вот:

Private Sub Text1_Change()
Command1.Enabled = (Len(Text1.Text) = Text1.MaxLength) And (Len(Text2.Text) = Text2.MaxLength) And (Len(Text3.Text) = Text3.MaxLength)
If Text1.Text = Text1.MaxLength Then Text2.SetFocus
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
'***kolu steraemo 4uslo to***********
    If KeyAscii = 8 Then Exit Sub
'****kolu vvodumo tsufru***************
    If KeyAscii = 46 Or (KeyAscii > 47 And KeyAscii < 58) Then Exit Sub
'****kolu inwi sumvolu to ne vvodnmo i zvyk****
    KeyAscii = 0
    Beep
End Sub

Может я чего-то напутал??? :(

Ответить

Номер ответа: 29
Автор ответа:
 altrego



ICQ: 244-611-814 

Вопросов: 3
Ответов: 28
 Web-сайт: www.v2.i-diot.net
 Профиль | | #29
Добавлено: 03.05.07 14:43
Слушайте, а так не проще ли? Взять текстовые поля в массив, и таким макаром:

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
If (KeyAscii = 8) Or (KeyAscii = 46) Or ((KeyAscii > 47) And (KeyAscii < 58)) Then Exit Sub
KeyAscii = 0
Beep
End Sub

Private Sub Text1_LostFocus(Index As Integer)
For i = 0 To Me.Text1.UBound
  If (Me.Text1.Item(i) = "";) Or (Len(Me.Text1.Item(i)) < Me.Text1.Item(i).MaxLength) Then Me.Command1.Enabled = False: Exit Sub
Next i
Me.Command1.Enabled = True
End Sub


Вот и весь код. Вставляй сколь угодно текстбоксов, главное не забудь у всех выставить MaxLength, поставить текстбоксам индексы и изначально сделать кнопку.enabled=false.
Me.Text1.Item(i).MaxLength можно заменить конкретным числом, если оно известно заранее.

Что бы перескакивало можно такой код применить:
Private Sub Text1_Change(Index As Integer)
If Index < Me.Text1.UBound Then
   If Len(Me.Text1.Item(Index)) = Me.Text1.Item(Index).MaxLength Then
      Me.Text1.Item(Index + 1).SetFocus
   End If
End If
End Sub


Здесь тоже Me.Text1.UBound и Me.Text1.Item(Index).MaxLength можно заменить конкретными числами, если они известны.
Еще можно это и под один If поставить, но для понятности так лучше...

Ответить

Номер ответа: 30
Автор ответа:
 altrego



ICQ: 244-611-814 

Вопросов: 3
Ответов: 28
 Web-сайт: www.v2.i-diot.net
 Профиль | | #30
Добавлено: 03.05.07 14:48
Млин, забыл коменты вставить. Короче, Text1_KeyPress думаю и так понятно, для проверки введеных символов.
А в Text1_LostFocus я чуть нагнал (только сейчас сообразил, когда коммент хотел написать :))), что в условии выражение (Me.Text1.Item(i) = "";) не нужно, а можно только (Len(Me.Text1.Item(i)) < Me.Text1.Item(i).MaxLength) оставить...
Ну, если длина меньше чем надо, то кнопка неактивна, выходим из саба...

Ответить

Страница: 1 | 2 | 3 |

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



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