自问自答:增强TextBox的功能

SZRainworm 2005-01-11 03:44:08
笨人笨法,引一笑。^_^
此控件只增加了Textbox的三种状态:文本,数字,百分比。
且按Enter时进入下一控件。

If KeyAscii = 13 Then
'如果按enter,进入下一控件。
Me.Parent.SelectNextControl(Me, True, True, False, True)
End If
此语句对其它控件一样有效。




Imports System.ComponentModel
Public Class GreatTextBox
'此控件只增加了Textbox的三种状态
Inherits System.Windows.Forms.TextBox
Dim mnType As Integer
Dim mnLong As Integer
Dim mnText As String
#Region " Windows 窗体设计器生成的代码 "

Public Sub New()
MyBase.New()
mnType = 0
mnLong = 4

'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'UserControl1 重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer

'注意:以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
'
'UserControl1
'
Me.Name = "UserControl1"

End Sub

#End Region


Public Enum TypeID
MeString = 0
'0为文本
MeNumeric = 1
'1为数字
MePercent = 2
'2为百分比
End Enum

Public Property Type() As TypeID
Get
Return mnType
End Get
Set(ByVal Value As TypeID)
mnType = Value
Select Case Value
Case Type.MeString
Me.Text = ""
Me.TextAlign = HorizontalAlignment.Left
Case Type.MeNumeric
Me.Text = "0"
Me.Text = FormatNumber(Me.Text, NumPointLong, , , TriState.True)
Me.TextAlign = HorizontalAlignment.Right
Case TypeID.MePercent
Me.Text = "0"
Me.Text = FormatNumber(Me.Text, NumPointLong, TriState.True, , )
Me.Text = Me.Text & "%"
Me.TextAlign = HorizontalAlignment.Right
End Select
End Set
End Property

'如果是数字和百分比,确定小数点后数字
Public Property NumPointLong() As Integer
Get
Return mnLong
End Get
Set(ByVal Value As Integer)
If mnType = TypeID.MeNumeric Or TypeID.MePercent Then
mnLong = Value
Select Case Type
Case Type.MeString
Me.Text = ""
Me.TextAlign = HorizontalAlignment.Left
Case Type.MeNumeric
Me.Text = "0"
Me.Text = FormatNumber(Me.Text, NumPointLong, , , TriState.True)
Me.TextAlign = HorizontalAlignment.Right
Case TypeID.MePercent
Me.Text = "0."
Me.Text = FormatNumber(Me.Text, NumPointLong, , , TriState.True)
Me.Text = Me.Text & "%"
Me.TextAlign = HorizontalAlignment.Right
End Select
Else
End If
End Set
End Property

Private Sub GreatTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
Dim KeyAscii As Integer
KeyAscii = Asc(e.KeyChar)

Select Case mnType
Case TypeID.MeString
Case TypeID.MePercent, TypeID.MeNumeric
'只能输入数字
Select Case KeyAscii
Case 48 To 57, 8, 13
Case 45
If InStr(Me.Text, "-") <> 0 And Not Me.SelectionLength = Len(Me.Text) Then
KeyAscii = 0
End If
If Me.SelectionStart <> 0 Then
KeyAscii = 0
End If
Case 46
If InStr(Me.Text, ".") <> 0 And Not Me.SelectionLength = Len(Me.Text) Then
KeyAscii = 0
Else
End If
Case Else
KeyAscii = 0
End Select
If KeyAscii = 0 Then
e.Handled = True
Else
e.Handled = False
End If

End Select
If KeyAscii = 13 Then
'如果按enter,进入下一控件。
Me.Parent.SelectNextControl(Me, True, True, False, True)
End If
End Sub

'实际上vbText才是你要输入且要的事实数据。
Public Property vbText() As String
Get
mnText = Me.Text
Select Case mnType
Case TypeID.MeString

Case TypeID.MePercent
Dim I As Integer
I = InStr(mnText, "%")
If I = 0 Then
Return mnText
Else
mnText = mnText.Remove(I - 1, 1)
mnText = mnText / 100
Return mnText
End If
Case Else
Return mnText
End Select
Return mnText
End Get
Set(ByVal Value As String)
Try
Select Case mnType
Case TypeID.MeString
mnText = Value
Case TypeID.MeNumeric
mnText = FormatNumber(Value, mnLong)
Case TypeID.MePercent
mnText = FormatPercent(Value, mnLong, , , TriState.True)
End Select
Catch
End Try
Me.Text = mnText
End Set
End Property

Private Sub GreatTextBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Validating
Try
Select Case mnType
Case TypeID.MeString
Case TypeID.MeNumeric
Me.Text = FormatNumber(Me.Text, mnLong)
Case TypeID.MePercent
Me.Text = FormatPercent(Me.Text / 100, mnLong, , , TriState.True)
End Select
Catch
End Try
End Sub

End Class



请输入及引用用vbText
...全文
58 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2005-01-11
  • 打赏
  • 举报
回复
up 这样好,鼓励一下
True1024 2005-01-11
  • 打赏
  • 举报
回复
跟楼主学习一下.顺便占个一楼,可惜没分.呵呵.

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧