| http://www.sqlsky.com/ |
|
|
Imports System.Text
Public Class mytextbox
Inherits System.Windows.Forms.TextBox
Dim WithEvents btn As Button
Dim WithEvents btn As Button
Public Sub New()
MyBase.New()
´该调用是 Windows 窗体设计器所必需的。
´该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
´在 InitializeComponent() 调用之后添加任何初始化
´在 InitializeComponent() 调用之后添加任何初始化
btn = New Button()
btn.Size = New Size(23, 23)
Me.Controls.Add(btn)
btn.Dock = DockStyle.Right
btn.BackColor = SystemColors.Control
Me.Text = ""
End Sub
Public Event myclick(ByVal sender As Object, ByVal e As EventArgs)
Public Event myclick(ByVal sender As Object, ByVal e As EventArgs)
Private Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.Click
RaiseEvent myclick(Me, e)
End Sub
Private Sub btn_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.MouseEnter
Private Sub btn_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.MouseEnter
Cursor = Cursors.Default
End Sub
Private Sub btn_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.MouseLeave
Private Sub btn_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.MouseLeave
Cursor = Cursors.IBeam
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Dim KeyAsc As Integer = m.WParam.ToInt32
Select Case m.Msg
Case &H102
If checklength() Then
If KeyAsc <> 8 Then
Return
End If
Else
Me.MaxLength = 0
End If
Case &H302
If checklength() Then
Return
End If
End Select
MyBase.WndProc(m)
End Sub
´检查函数
Private Function checklength(Optional ByVal str As String = "") As Boolean
If str = "" Then
Dim leng As Integer = CInt(Me.CreateGraphics.MeasureString(Me.Text, Me.Font).Width)
Dim m As Integer = Me.Width
Dim p As Integer = btn.Width
If leng >= m - p - 5 Then
Return True
End If
Else
Dim leng As Integer = CInt(Me.CreateGraphics.MeasureString(str, Me.Font).Width)
Dim m As Integer = Me.Width
Dim p As Integer = btn.Width
If leng + 1 >= m - p Then
Return True
End If
End If
Return False
End Function
´修改text属性时检查
Public Overrides Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal Value As String)
If checklength(Value) Then
Throw New Exception("超出可以显示的范围!")
End If
MyBase.Text = Value
End Set
End Property
End Class
End Class
‘/////////////////////////////// 闵峰
‘/////////////////////////////// 闵峰