Visual Basic, .NET, ASP, VBA, VBScript
 
  Библиотека кодов  
  Стандартные элементы >>> Text Box  
     
  Использование API при работе с TextBox'ом  
  В данном примере вам понадобится дополнительный модуль, в который внесите следующий код:

Option Explicit
Public Const EM_EMPTYUNDOBUFFER = &HCD
Public Const EM_CANUNDO = &HC6
Public Const EM_GETMODIFY = &HB8
Public Const EM_SETMODIFY = &HB9
Public Const EM_UNDO = &HC7
Public Const GWL_STYLE = (-16)
Public Const ES_NUMBER = &H2000
Public Const ES_UPPERCASE = &H8&
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

А теперь вы можете использовать модуль для следующих действий над элементом TextBox
 

Запрос: можно отменить последнее действие?

SendMessage(Text1.hwnd, EM_CANUNDO, 0, 0)

Запрос: изменился ли текст?

SendMessage(Text1.hwnd, EM_GETMODIFY, 0, 0)

Установить: изменился текст или нет

Dim DirtyFlag As Long
DirtyFlag = SendMessage(Text1.hWnd, EM_GETMODIFY, ByVal 0&, ByVal 0&)
If DirtyFlag = 1 Then
MsgBox "Содержимое Text Box изменилось"
Else
MsgBox "Содержимое Text Box не изменилось"
End If
End Sub

Отменить последнее действие

If SendMessage(Text1.hwnd, EM_CANUNDO, 0, 0) <> 0 Then SendMessage(Text1.hwnd, EM_UNDO, 0, 0)

Позволить вводить в ТекстБокс только определенные символы

Dim l As Long, Dim r As Long
l = GetWindowLong(Text1.hwnd, GWL_STYLE)
r = SetWindowLong(Text1.hwnd, GWL_STYLE, l Or ES_NUMBER) 'только цифры
l = GetWindowLong(Text1.hwnd, GWL_STYLE)
r = SetWindowLong(Text1.hwnd, GWL_STYLE, l Or ES_UPPERCASE) 'буквы в верхнем регистре и цифры
l = GetWindowLong(Text1.hwnd, GWL_STYLE)
r = SetWindowLong(Text1.hwnd, GWL_STYLE, l Or ES_LOWERCASE) 'буквы в нижнем регистре и цифры

Очистить буфер отмены

Call SendMessage(Text1.hwnd, EM_EMPTYUNDOBUFFER, 0, 0)
Call SendMessage(Text1.hwnd, EM_SETMODIFY, False, 0)

Перебор контролов на предмет изменения их содержимого

Public Sub SaveData()
Dim itextBoxCount As Integer
For itextBoxCount = 0 To Controls.Count - 1
If TypeOf Controls(itextBoxCount) Is TextBox Then
If Changed(Controls(itextBoxCount)) Then
'Place code to save data here
End If
End If
Next
End Sub

Public Function Changed(ByVal ctlTextBox As TextBox) As Boolean
Changed = SendMessage(ctlTextBox.hwnd, EM_GETMODIFY, 0, 0) <> 0
End Function

 
     
  VBNet online (всего: 51586)  
 

Логин:

Пароль:

Регистрация, забыли пароль?


В чате сейчас человек
 
     
  VBNet рекомендует  
   
     
  Лучшие материалы  
 
ActiveX контролы (112)
Hitman74_Library (36119)
WindowsXPControls (20739)
FlexGridPlus (19374)
DSMAniGifControl (18295)
FreeButton (15157)
Примеры кода (546)
Parol (18027)
Passworder (9299)
Screen saver (7654)
Kerish AI (5817)
Folder_L (5768)
Статьи по VB (136)
Мое второе впечатление... (11236)
VB .NET: дорога в будущее (11161)
Основы SQL (9225)
Сообщения Windows в Vi... (8788)
Классовая теория прогр... (8619)
 
     
Техническая поддержка MTW-хостинг | © Copyright 2002-2011 VBNet.RU | Пишите нам