GDI+ Rechtseck im Control zeichnen

  • Allgemein

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    GDI+ Rechtseck im Control zeichnen

    Hallo liebe Community,

    Grundsätzlich kenne ich mich sehr gut mit GDI+ aus, jedoch weiß ich nun nicht weiter.
    Ich will das wenn ich die Tabs mit einem Rechtseck übermale sich dann noch eine UMRANDUNG um das Leere TabControl zieht.
    Code zum Übermalen

    VB.NET-Quellcode

    1. Public Overrides ReadOnly Property DisplayRectangle() As System.Drawing.Rectangle
    2. Get
    3. If Me.HideTabs Then
    4. Return New Rectangle(0, 0, Width, Height)
    5. Else
    6. Dim tabStripHeight As Integer, itemHeight As Integer
    7. If Me.Alignment <= TabAlignment.Bottom Then
    8. itemHeight = Me.ItemSize.Height
    9. Else
    10. itemHeight = Me.ItemSize.Width
    11. End If
    12. If Me.Appearance = TabAppearance.Normal Then
    13. tabStripHeight = 5 + (itemHeight * Me.RowCount)
    14. Else
    15. tabStripHeight = (3 + itemHeight) * Me.RowCount
    16. End If
    17. Select Case Me.Alignment
    18. Case TabAlignment.Bottom
    19. Return New Rectangle(4, 4, Width - 8, Height - tabStripHeight - 4)
    20. Case TabAlignment.Left
    21. Return New Rectangle(tabStripHeight, 4, Width - tabStripHeight - 4, Height - 8)
    22. Case TabAlignment.Right
    23. Return New Rectangle(4, 4, Width - tabStripHeight - 4, Height - 8)
    24. Case Else
    25. Return New Rectangle(4, tabStripHeight, Width - 8, Height - tabStripHeight - 4)
    26. End Select
    27. End If
    28. End Get
    29. End Property


    Das Ganze Funktioniert ja wenn ich es extra in Form1 mache. Also im On-Paint event.
    Und die Grenze würde ich mit diesem Code malen:

    VB.NET-Quellcode

    1. Dim r As New Rectangle(Me.Location.X - 1, Me.Location.Y - 1, Me.Width + 2, Me.Height + 2)
    2. With e.Graphics
    3. .DrawRectangle(Pens.Black, r)
    4. End With


    Jetzt ist die Frage, in welchem Event soll ich das ganze ausführen damit es funktioniert.
    Im OnPaint passiert nichts.

    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    2. Dim r As New Rectangle(Me.Location.X - 1, Me.Location.Y - 1, Me.Width + 2, Me.Height + 2)
    3. With e.Graphics
    4. .DrawRectangle(Pens.Black, r)
    5. End With
    6. MyBase.OnPaint(e)
    7. End Sub


    Alles was ich probiere führt zu nichts. Selbst wenn ich einfach folgendes mache:

    VB.NET-Quellcode

    1. Sub DrawBorder()
    2. Dim g As Graphics
    3. Dim p As Pen
    4. Dim r As Rectangle
    5. g = Me.CreateGraphics
    6. p = New Pen(System.Drawing.Color.Black, 1)
    7. r = New Rectangle(Me.Location.X - 1, Me.Location.Y - 1, Me.Width + 2, Me.Height + 2)
    8. g.DrawRectangle(p, r)
    9. End Sub

    Und dies einfach aufrufe. Was mach ich falsch? Wie mache ich es am besten?

    Bitte um Hilfe
    Danke im Vorraus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    Ich will das wenn ich die Tabs mit einem Rechtseck übermale sich dann noch eine UMRANDUNG um das Leere TabControl zieht.

    Moin,

    eine Umrandung zog sich bei mir bei folgendem Versuch:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class TabEx
    3. Inherits TabControl
    4. Public Sub New()
    5. ' style settings
    6. Me.SetStyle(ControlStyles.UserPaint, True)
    7. Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    8. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    9. Me.UpdateStyles()
    10. End Sub
    11. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    12. MyBase.OnPaint(e)
    13. Dim graphics As Graphics = e.Graphics
    14. graphics.DrawRectangle(New Pen(Color.Black, 1), 0, 0, Me.Size.Width - 1, Me.Size.Height - 1)
    15. End Sub
    16. End Class


    Aber warscheinlicher ist, dass ich Dich nicht ganz verstanden habe nach einem Gläschen lecker Wein ;) ..

    Bis denn dann, LG,
    Bruno
    Nein, das meine ich nicht. Bei meinem TabControl gibts es die funktion dass die reiter ausgeblendet werden.
    Siehe:
    Mit Reiter

    Ohne Reiter.

    Jedoch möchte ich, dass bei dem Bild ohne Reiter noch eine Umrandung dazu kommt. (eig. diese umrandung wie beim TabControl mit dem Reiter.)
    Deines Funktioniert leider auch nicht so wie ich es will.

    Bitte um Hilfe.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Und gerade das will ich vermeide, da sonst das ganze design im ar*** ist.
    (Standard Design)
    Für ein anderes Design kommt eh Version 2.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Weiß aber ebenfalls nicht wie ich das hier(in diesem fall) sinnvoll einsetze.

    VB.NET-Quellcode

    1. Sub DrawBorder()
    2. Dim g As Graphics = Me.CreateGraphics()
    3. Dim r As New Rectangle(Me.Location.X - 1, Me.Location.Y - 1, Me.Width + 2, Me.Height + 2)
    4. g.DrawRectangle(Pens.Black, r)
    5. End Sub

    funkt nämlich nicht. passiert nichts.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!