
vb.net中自定義了一個textbox控制元件擴展,重繪邊框后,輸入文字時的字體變相變大,滑鼠移開后文字就正常了,搞了幾天一直不知道是什么原因,本人編程愛好者,小白一個,求大神指點迷津,感激不盡!
uj5u.com熱心網友回復:
自定義的代碼貼出來看一下uj5u.com熱心網友回復:
Imports System.Drawing.Drawing2DImports System.Windows.Forms
Imports Common
Imports System.Drawing
Imports System.ComponentModel
<ToolboxBitmap(GetType(TextBox))>
Public Class TextBoxDef
Inherits TextBox
''' <summary>
''' 重繪控制元件
''' </summary>
''' <param name="e"></param>
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
Dim rect As New Rectangle(0, 0, Me.Width, Me.Height) ' = e.ClipRectangle '
If Me.BorderStyle = BorderStyle.FixedSingle Then
e.Graphics.DrawRectangle(New Pen(BorderColor, 2), rect)
ElseIf Me.BorderStyle = BorderStyle.FixedLine Then
e.Graphics.DrawLine(New Pen(BorderColor, 2), rect.Left, rect.Bottom, rect.Right, rect.Bottom)
Else
e.Graphics.Clear(Me.BackColor)
End If
'文字
Dim FSize As System.Drawing.SizeF = e.Graphics.MeasureString(Me.Text, Me.Font)
'e.Graphics.MeasureString(Me.Text, Me.Font, FSize)
'獲取或設定文字的位置
Dim left As Single = 0 '(Me.Width - FSize.Width) / 2
Dim top As Single = (Me.Height - FSize.Height) / 2
'文字筆刷
Dim tBrush As New SolidBrush(Me.ForeColor)
'書寫文字
e.Graphics.DrawString(Me.Text, Me.Font, tBrush, left, top)
End Sub
Public Sub New()
InitializeComponent()
Me.Height = MyBase.Height
Me.Width = MyBase.Width
Me.BackColor = Color.White
Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.FixedHeight, False)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.BorderStyle = BorderStyle.FixedLine
End Sub
Private _MouseOver As MouseOver = MouseOver.isFalse
''' <summary>
''' 指定當滑鼠移到控制元件上面時,控制元件的狀態變化
''' </summary>
''' <returns></returns>
<Description("指示滑鼠移到控制元件上時控制元件的顯示狀態")>
Public Property MouseOver() As MouseOver
Get
Return _MouseOver
End Get
Set(ByVal value As MouseOver)
_MouseOver = value
End Set
End Property
''' <summary>
''' 滑鼠離開事件
''' </summary>
''' <remarks></remarks>
Private Sub ColTxtBox_MouseLeave(sender As Object, e As EventArgs) Handles Me.MouseLeave
Dim bool As Boolean = Functions.CtrMouseInside(Me, MousePosition.X, MousePosition.Y)
If bool = True Or Me.Focused = True Then Exit Sub
If Me.MouseOver = MouseOver.isTrue Then
Me.BorderStyle = BorderStyle.FixedLine
End If
End Sub
''' <summary>
''' 滑鼠進入控制元件事件
''' </summary>
''' <remarks></remarks>
Private Sub ColTxtBox_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter
'Dim bool As Boolean = Functions.CtrMouseInside(Me, MousePosition.X, MousePosition.Y)
'If bool = False Then Exit Sub
If Me.MouseOver = MouseOver.isTrue Then
Me.BorderStyle = BorderStyle.FixedSingle
End If
End Sub
'''' <summary>
'''' 控制元件獲得焦點事件
'''' </summary>
'''' <param name="sender"></param>
'''' <param name="e"></param>
'Private Sub ColTxtBox_GotFocus(sender As Object, e As EventArgs) Handles Me.GotFocus
' Me.BorderStyleDef = BorderStyleDef.FixedSingle
'End Sub
''' <summary>
''' 控制元件失去焦點事件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub ColTxtBox_LostFocus(sender As Object, e As EventArgs) Handles Me.LostFocus
Dim bool As Boolean = Functions.CtrMouseInside(Me, MousePosition.X, MousePosition.Y)
If bool = True Then Exit Sub
Select Case Me.BorderStyle
Case BorderStyle.Fixed3D
Exit Sub
Case BorderStyle.None
Exit Sub
End Select
Me.BorderStyle = BorderStyle.FixedLine
End Sub
Private _BorderColor As Color
''' <summary>
''' 邊框顏色
''' </summary>
''' <value></value>
''' <returns></returns>
<Description("指示控制元件的邊框顏色")>
Public Property BorderColor() As Color
Get
Return _BorderColor
End Get
Set(ByVal value As Color)
_BorderColor = value
Me.Refresh()
End Set
End Property
Private _BorderStyle As BorderStyle
''' <summary>
''' 自定義邊框設定
''' </summary>
''' <returns></returns>
<Description("指示擴展控制元件邊框型別")>
Public Overloads Property BorderStyle() As BorderStyle
Get
Return _BorderStyle
End Get
Set(ByVal value As BorderStyle)
Select Case value
Case BorderStyle.None
MyBase.BorderStyle = System.Windows.Forms.BorderStyle.None
Case BorderStyle.Fixed3D
MyBase.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
Case BorderStyle.FixedSingle
MyBase.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Case BorderStyle.FixedLine
MyBase.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
End Select
_BorderStyle = value
Me.Refresh()
End Set
End Property
End Class
uj5u.com熱心網友回復:
小白一個,請
笑話俺!
uj5u.com熱心網友回復:
'Private Sub ColTxtBox_GotFocus(sender As Object, e As EventArgs) Handles Me.GotFocus' Me.BorderStyleDef = BorderStyleDef.FixedSingle
'End Sub
代碼沒仔細看,輸入時字體變大,肯定是獲取焦點時對其進行設定了什么,就是我上面的代碼,你挨個分析代碼就行了,一步步除錯看是代碼哪個地方影響了字體
uj5u.com熱心網友回復:
這些代碼我注釋掉了還是沒有解決問題uj5u.com熱心網友回復:
單步除錯找不到字體變化時的代碼?反正主要看獲取焦點,失去焦點,滑鼠點擊,滑鼠離開這些相關事件代碼就行了
uj5u.com熱心網友回復:
您說的哪些代碼我全部注釋掉都不起作用,估計跟這個沒有關系,最主要的是系統繪制還是自繪的問題
uj5u.com熱心網友回復:
代碼沒錯就是老了點,因為設定了mouseover事件,所以跟父控制元件不符,所以出現字體變大的情況。你要是覺得不能忍,就把mouseover事件刪掉,順便刪掉你粘貼的注釋。uj5u.com熱心網友回復:
代碼沒錯就是老了點,因為設定了mouseover事件,所以跟父控制元件不符,所以出現字體變大的情況。你要是覺得不能忍,就把mouseover事件刪掉,順便刪掉你粘貼的注釋。
我是小白一個,自己查資料學習的,知識都是東拼西湊的,所以代碼就寫的不倫不類了,老師見笑了.我按照您說的思路試一下看行不行,順便問一下,刪掉注釋是什么意思?是不是我注釋牛頭不對馬嘴啊?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/94826.html
標籤:VB.NET
