在textbox里放按钮并控制输入字符不能覆盖住按钮(包括设计阶段)

原创 2005年05月28日 08:48:00

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

 ‘///////////////////////////////              闵峰

 ‘///////////////////////////////              闵峰

推荐阅读秦军先生的《建筑设计阶段的BIM应用》文章,略谈Revit二次开发怎样解决BIM应用的障碍

秦军的《建筑设计阶段的BIM应用》 原发布在《筑技艺杂志》,是很少见的关于BIM实施经验总结的好文章。 文章主要谈到几个话题,都是在实践过程中总结出来的宝贵经验。值得设计院决策层和实施管理层仔细阅读...

40-设计阶段.part1.rar

  • 2012年03月07日 13:36
  • 70MB
  • 下载

40-设计阶段.part2.rar

  • 2012年03月07日 13:38
  • 40.87MB
  • 下载

合作开发——设计阶段

最近一直在做合作开发的图文档什么的,刚开始的时候是很纠结的,纠结的原因就是怕自己做不好,想的太多。回想下自己第一次做个人版画图的时候,也没有这么前思后想的,也许是因为这次深感责任重大的原因吧,总想着不...

软件工程的软件设计阶段

  • 2012年05月10日 20:05
  • 610KB
  • 下载

英文的系统设计阶段的文档

  • 2008年06月24日 17:47
  • 4.79MB
  • 下载

【VB与数据库】机房收费系统设计阶段之结账

近几天一直在看米老师语录,其中有一条是:“技术永远是第二 ;思想永远是第一”。在机房收费系统结账的方面体现的真是很淋漓尽致。在结账这部分中汇总了任何人员的操作记录(购卡、充值、退卡、临时用户),最后结...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在textbox里放按钮并控制输入字符不能覆盖住按钮(包括设计阶段)
举报原因:
原因补充:

(最多只允许输入30个字)