Eigenes TabControl erbt von TabControl -> Vorhandene Properties benutzen

  • VB.NET

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

    Eigenes TabControl erbt von TabControl -> Vorhandene Properties benutzen

    Hello,

    Ich habe ein TabControl erstellt, welches von TabControl erbt:

    VB.NET-Quellcode

    1. Public Class TabControlKasse
    2. Inherits TabControl
    3. Dim _SelectedTabColor As Color = Color.Red
    4. Dim _UnselectedTabColor As Color = Color.Blue
    5. Dim _BackgroundColor As Color = Color.Gainsboro
    6. Sub New()
    7. SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)
    8. DoubleBuffered = True
    9. SizeMode = TabSizeMode.Fixed
    10. ItemSize = New Size(30, 120)
    11. End Sub
    12. Protected Overrides Sub CreateHandle()
    13. MyBase.CreateHandle()
    14. Alignment = TabAlignment.Left
    15. End Sub
    16. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    17. Dim b As New Bitmap(Width, Height)
    18. Dim g As Graphics = Graphics.FromImage(b)
    19. g.Clear(_BackgroundColor)
    20. For i = 0 To TabCount - 1
    21. Dim TabRectangle As Rectangle = GetTabRect(i)
    22. If i = SelectedIndex Then
    23. 'Tab ist ausgewählt
    24. g.FillRectangle(New SolidBrush(_SelectedTabColor), TabRectangle)
    25. Else
    26. 'Tab ist nicht ausgewählt
    27. g.FillRectangle(New SolidBrush(_UnselectedTabColor), TabRectangle)
    28. End If
    29. g.DrawString(TabPages(i).Text, Font, New SolidBrush(Color.Black), TabRectangle, New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
    30. Next
    31. e.Graphics.DrawImage(b.Clone, 0, 0)
    32. g.Dispose() : b.Dispose()
    33. MyBase.OnPaint(e)
    34. End Sub
    35. #Region "Eigenschaften"
    36. ''' <summary>
    37. ''' Farbe des selektierten Tabs
    38. ''' </summary>
    39. ''' <value>Farbe</value>
    40. Public Property SelectedTabColor() As Color
    41. Get
    42. Return Me._SelectedTabColor
    43. End Get
    44. Set(ByVal value As Color)
    45. Me._SelectedTabColor = value
    46. End Set
    47. End Property
    48. ''' <summary>
    49. ''' Farbe der nicht selektierten Tabs
    50. ''' </summary>
    51. ''' <value>Farbe</value>
    52. Public Property UnselectedTabsColor() As Color
    53. Get
    54. Return Me._UnselectedTabColor
    55. End Get
    56. Set(ByVal value As Color)
    57. Me._UnselectedTabColor = value
    58. End Set
    59. End Property
    60. ''' <summary>
    61. ''' Farbe des Hintergrundes
    62. ''' </summary>
    63. ''' <value>Farbe</value>
    64. Public Property BackgroundColor() As Color
    65. Get
    66. Return Me._BackgroundColor
    67. End Get
    68. Set(ByVal value As Color)
    69. Me._BackgroundColor = value
    70. End Set
    71. End Property
    72. #End Region
    73. End Class



    Bezug auf den TabPage-Text:
    Ich habe die Eigenschaft Text (die geerbt wurde), die ich ganz normal ohne Code-Änderung benutzen kann. Im Designer ändere ich also den Text des gewünschten Tabs und siehe da, er ändert sich.
    Ich habe aber auch die Eigenschaft ForeColor (des Textes), welche sich nicht mitändert.

    Meine Frage: Wie kann ich dem Control mitteilen, dass er die bereits vorhandene Property dafür benutzen soll, die ForeColor des Textes zu ändern, welche geerbt wurde?
    Ich könnte zwar eine neue Property anlegen, aber wozu, wenn es sie ja bereits gibt.

    Geht das ?

    Vielen Dank!

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „TRiViUM“ ()

    TRiViUM schrieb:

    Ich könnte zwar eine neue Property anlegen, aber wozu, wenn es sie ja bereits gibt.
    Nicht das TabControl hat eine Property ForeColor, sondern die TabPage.
    Wenn Dein TabControl eine Property ForeColor haben soll, musst Du ihm eine geben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ups, Stimmt.
    Da bin ich wohl durcheinander gekommen.

    Also gebe ich dem TabControl die Eigenschaft ForeColor bzw erstelle sie.

    Aber Die Eigenschaften in der TabPage wie ForeColor benötige ich dann quasi nicht.
    Kann man diese dann Ausblenden, dass es übersichtlicher wird?

    TRiViUM schrieb:

    Kann man diese dann Ausblenden
    Ja, gib der Property einfach

    VB.NET-Quellcode

    1. <Browsable(False)> _
    davor.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sehr Cool, hat funktioniert.
    Also zum Verstecken vorhanderer Properties (wenn diese geerbt wurden):

    VB.NET-Quellcode

    1. <System.ComponentModel.Browsable(False)> _
    2. Overrides Property ForeColor



    Dann hab ich noch die Frage, da alle Properties, die ich in dem oben angegebenen Code schreibe, nur dem TabControl zugewiesen werden.
    Wie müsste ich Vorgehen, wenn ich Properties den TabPage's zuweisen möchte?

    Und desweiteren zeichnet sich das Control nur bei Verschiebung neu bzw. dann, wenn man es anklickt.

    Geht das auch direkt nach änderung einer Property?

    Danke schonmal:)

    TRiViUM schrieb:

    Properties den TabPage's zuweisen möchte?
    Dann musst Du Dir eigene TabPages machen und dafür sorgen, dass diese von Deinem TabControl per default erstellt werden.
    Hinweis: TabPages-Collection, da musst Du wohl was überladen.
    Und gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!