Property BackColor Überschreiben

  • VB.NET

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

    Property BackColor Überschreiben

    Hallo!
    Ich überschreibe die Property (oder Sub) “BackColor“.
    In Entwurfsmodus wird die Eigenschaft “BackColor“ in Eigenschaften Fenster Angezeigt.
    Man kann die Farbe ohne Probleme zuordnen (Auswehlen) zb. “Rot“.
    Ich Starte das Programm und Beende.Markiere ich das Objekt, Öffne ich Eigenschaften Fenster und die Eigenschaf “BackColor“verliert das ausgewählte Wert “Rot“.
    Bei der Property “BackColorTest“ funktioniert alles einwandfrei.
    Die Eingaben Werte werden Gespeichert(“prBackColorTest“) und wider Angezeigt.
    Wie kann ich die Property “BackColor“ überschreiben, dass die Eingabe Gespeichert wird?
    Für Eure Hilfe bedanke ich mich in Voraus.

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class MenueButton
    3. Inherits Button
    4. Private prBackColor As Color
    5. Private prBackColorTest As Color
    6. <BrowsableAttribute(True)> _
    7. <Category("Darstellung")> _
    8. Public Overloads Property BackColor() As Color
    9. Get
    10. Return prBackColor
    11. End Get
    12. Set(ByVal value As Color)
    13. prBackColor = value
    14. End Set
    15. End Property
    16. <BrowsableAttribute(True)> _
    17. <Category("Darstellung")> _
    18. Public Property BackColorTest() As Color
    19. Get
    20. Return prBackColorTest
    21. End Get
    22. Set(ByVal value As Color)
    23. prBackColorTest = value
    24. End Set
    25. End Property
    26. End Class

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Peter2002“ ()

    @Peter2002:: Willkommen im Forum. :thumbup:
    Leider ist Dein Beitrag so nicht lesbar. Drück bitte auf den Bearbeiten Button, markiere den Quellcode und drück auf den [VB]-Button über dem Edit-Feld.
    Nutze den Vorschau-Button und editiere, so erforderlich, den Quellcode so, dass wir ihn als Quellcode erkennen können. :D
    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!
    Ich glaube, wenn du etwas überschreibst, musst du andere Argumente als in Originalmethode/property/sub angeben, sonst weiß das System nicht, welche es aufrufen soll und ruft deswegen das Original auf.

    Wenn also Backcolor sonst keine Argumente hat, musst du bei deinem Backcolor etwas übergeben (Get (ByVal value As Color)), auch wenn du es nicht nutzt und genau so auch aufrufen.

    Peter2002 schrieb:

    ist Lesbar.
    Fast.
    Da fehlen etliche Leerzeichen nach End XXX und As YYY.
    Du musst die Property nicht überschreiben, probier zunächst mal, der BackColor einen DefaultValue zu 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!
    @Peter2002:: Du musst natürlich die Property noch runterreichen:

    VB.NET-Quellcode

    1. <BrowsableAttribute(True)> _
    2. <Category("Darstellung")> _
    3. Public Overloads Property BackColor() As Color
    4. Get
    5. Return prBackColor
    6. End Get
    7. Set(ByVal value As Color)
    8. prBackColor = value
    9. MyBase.BackColor = prBackColor ' das hier
    10. End Set
    11. End Property
    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!
    "Overloads" <> "Overrides"
    Mit Overloads wird die Eigenschaft einfach nur überladen, also es gibt dann mehrere Eigenschaften, die "BackColor" heißen. Eigentlich dachte ich, das würde nur funktionieren, wenn die Argumente anders sind, da man sie ja sonst nicht voneinander unterscheiden kann, aber offensichtlich ist das mal wieder sone Sache, die der VB-Compiler nicht ernst genug nimmt. Naja, jedenfalls wird der Designer immer noch die alte Eigenschaft "BackColor" deiner vorziehen.
    Um das zu erreichen, was du vorhast, gibt es das "Overrides"-Schlüsselwort. Damit überschreibt man Member. Allerdings funktioniert das nur, wenn der Member, den du überschreiben willst, mit dem Schlüsselwort "Overrideable" gekennzeichnet ist (bzw. auch mit "MustOverride", in diesem Fall ist es aber Pflicht, den Member zu überschreiben). Dies ist bei den Control-Eigenschaften soweit ich weiß aber nicht der Fall, weshalb diese Option ausfällt.
    Es gibt noch ein Schlüsselwort namens "Shadows". Mit diesem kannst du Member der Basisklasse verbergen (das ist was anderes, als überschreiben). Da die Aufrufe auf das entsprechende Member der Basisklasse ja nicht virtuell ist (weil das "Overrideable"-Schlüsselwort fehlt), wird bei einem Aufruf des Basisklassenmembers auch dieser Member ausgeführt, anstatt wie bei "Overrides" dein neuer. Aufrufe an einen mit Shadows gekennzeichneten Member sind also nur an einem Objekt der Klasse, die diesen Member versteckt, möglich, oder an erbenden Klassen, nicht jedoch an Objekten der Basisklasse. Dir geht dabei also ein großer Teil der Polymorphie verloren.
    Ich Danke Euch für eure Antworte.
    Mit dem Eintrag "MyBase.BackColor = Color.Transparent" funktioniert es.
    Aber die Eigenschaft BackColor (von Objekt Button) wird immer den Wert "Color.Transparent" zugeordnet.

    Quellcode

    1. <BrowsableAttribute(True)> _
    2. <Category("Darstellung")> _
    3. Public Overloads Property BackColor() As Color
    4. Get
    5. Return prBackColor
    6. End Get
    7. Set(ByVal value As Color)
    8. MyBase.BackColor = Color.Transparent
    9. prBackColor = value
    10. End Set
    11. End Property

    Mir geht um das, dass die System Eigenschaft BackColor (MyBase.BackColor =) vom Objekt Button nicht Angesprochen wird,
    sondern nur die von mir neu definierte Property "BackColor"
    ich bin überrascht, dasses ühaupt kompiliert.
    weiters würde ich dringend von Shadows abraten zugunsten von Overrides.

    VB.NET-Quellcode

    1. <BrowsableAttribute(True)> _
    2. <Category("Darstellung")> _
    3. Public Overrides Property BackColor() As Color
    4. Get
    5. Return MyBase.BackColor
    6. End Get
    7. Set(ByVal value As Color)
    8. MyBase.BackColor = value
    9. End Set
    10. End Property

    (Und den Sinn der Übung insgesamt hab ich noch nicht geschnallt)