Eigenes Control - AutoSize selber machen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-checker.

    Eigenes Control - AutoSize selber machen

    Guten Tag

    Vorhin wurde mein Problem in dem Thread Eigenes Control - Schwarzer Hintergrund bei BackColor Transparent gelöst, jedoch kam eines neues Problem. Ich habe in meiner Controlsammlung auch ein Label und eine Checkbox. Das Problem ist, wenn ich von Control erbe, gibt es die AutoSize-Eigenschaft nicht, welche die Checkbox und das Label standardmäßig auf True gesetzt haben. Jetzt würde ich gerne wissen wie ich das selber machen kann?

    Vielen Dank im Voraus

    MfG
    Jonas Jelonek
    Du kannst mit Graphics.MeasureString berechnen lassen, wie viel Platz ein String verbraucht. Wenn du das im TextChanged-Event ausrechnest brauchst du nur noch die Größe des Controls auf die errechnete Größe setzen. Bei der Checkbox musst du natürlich noch das kleine Kästchen berücksichtigen.
    Na rate mal, was ich bisher schon gemacht habe. Nämlich genau das. Ich will jetzt nur noch, dass wie beim Label nur noch dieses eine kleine Kästchen in der linken oberen Ecke angezeigt wird und nicht an allen Ecken und Kanten. Und das gleiche bei der Checkbox.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Drawing
    3. Imports System.Windows.Forms
    4. Imports System.ComponentModel
    5. <ToolboxBitmap(GetType(System.Windows.Forms.Label))> _
    6. Public Class Label
    7. Inherits System.Windows.Forms.Control
    8. Public Sub New()
    9. ' Dieser Aufruf ist für den Designer erforderlich.
    10. InitializeComponent()
    11. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    12. SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    13. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    14. SetStyle(ControlStyles.ResizeRedraw, True)
    15. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    16. SetStyle(ControlStyles.UserPaint, True)
    17. End Sub
    18. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    19. MyBase.OnPaint(e)
    20. With e.Graphics
    21. .SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
    22. If AeroMode = True Then
    23. .TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
    24. Else
    25. .TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
    26. End If
    27. If Me.AutoSize Then
    28. Dim TextSize As SizeF = .MeasureString(Me.Text, Me.Font)
    29. Dim Size As New Size(CInt(TextSize.Width), CInt(TextSize.Height))
    30. Me.Size = Size
    31. End If
    32. Dim StringForm As New StringFormat(StringFormat.GenericDefault)
    33. .DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), New Point(-1, -1), StringForm)
    34. End With
    35. End Sub
    36. Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs)
    37. MyBase.OnPaintBackground(pevent)
    38. End Sub
    39. Protected Overrides Sub OnLayout(e As LayoutEventArgs)
    40. MyBase.OnLayout(e)
    41. End Sub
    42. Private _AutoSize As Boolean = True
    43. <Browsable(True)> _
    44. Public Overrides Property AutoSize As Boolean
    45. Get
    46. Return _AutoSize
    47. End Get
    48. Set(value As Boolean)
    49. _AutoSize = value
    50. Me.Invalidate()
    51. End Set
    52. End Property
    53. Protected Overrides ReadOnly Property CreateParams() As CreateParams
    54. Get
    55. Dim cp As CreateParams = MyBase.CreateParams
    56. cp.ExStyle = cp.ExStyle Or &H20
    57. 'WS_EX_TRANSPARENT
    58. Return cp
    59. End Get
    60. End Property
    61. Private _AeroMode As Boolean = False
    62. ''' <summary>
    63. ''' Ruft ab, ob der AeroMode eingeschaltet ist, oder legt es fest. Mit dem AeroMode wird der Text auf Glass korrekt dargestellt.
    64. ''' </summary>
    65. ''' <value></value>
    66. ''' <returns></returns>
    67. ''' <remarks></remarks>
    68. Public Property AeroMode As Boolean
    69. Get
    70. Return _AeroMode
    71. End Get
    72. Set(value As Boolean)
    73. _AeroMode = value
    74. Me.Invalidate()
    75. End Set
    76. End Property
    77. Private Sub Label_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
    78. Me.Invalidate()
    79. End Sub
    80. End Class