Usercontrol Properties entfernen geht nicht

  • VB.NET
  • .NET (FX) 4.0

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von dragonfly.

    Usercontrol Properties entfernen geht nicht

    Hallo!
    Ich möchte gerne von meinem User Control das Property "BackgroundImage" entfernen, geht aber nicht...

    Hier mein Code:

    VB.NET-Quellcode

    1. ​Public Class MyControlDesigner
    2. Inherits System.Windows.Forms.Design.ControlDesigner
    3. Private Shared ReadOnly _unneededProperties As String() = {"BackgroundImage", "BackgroundImageLayout"}
    4. Protected Overrides Sub PreFilterProperties(ByVal properties As System.Collections.IDictionary)
    5. 'Remove Text property
    6. 'properties.Remove("BackgroundImage")
    7. MyBase.PreFilterProperties(properties)
    8. For Each prop As String In _unneededProperties
    9. If properties.Contains(prop) Then
    10. properties.Remove(prop)
    11. End If
    12. Next
    13. End Sub
    14. End Class


    Und oben:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. <DesignerAttribute(GetType(MyControlDesigner))> _
    3. Public Class MyFancyUserControl



    Falls es hilft: Ich habe ein SplitContainer und da drinnen ist eine TextBox, ich möchte vom SplitContainer diese Eigenschaft entfernen bzw vom UserControl...
    Andoro Browser (V. 4)
    The new technology of browsing the web.
    Link to browser.
    @nafets Und wie mach ich das? (UserControl ist Neuland für mich)
    Andoro Browser (V. 4)
    The new technology of browsing the web.
    Link to browser.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TheScripter“ ()

    @TheScripter
    Versuch' mal die UnneededProperties nicht in einem Array abzuarbeiten, sondern explizit:

    VB.NET-Quellcode

    1. properties.Remove("BackgroundImage")
    2. properties.Remove("BackgroundImageLayout")

    Achtung: Die Angaben sind Case-sensitiv, also Groß- und Kleinschreibung beachten!

    //EDIT:
    Und zeig bitte einmal, von welchem Control die Klasse MyFancyUsercontrol erbt, und wie.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „us4711“ ()

    Vorab es ist ein Usercontrol das zu einer DLL kompiliert wird.
    Wenn ich diese DLL jemanden schicke, dann kann er ja dieses Control "designen".
    Und es soll nicht möglich sein, ein "BackgroundImage" zu setzten.
    Andoro Browser (V. 4)
    The new technology of browsing the web.
    Link to browser.
    Also im Eigenschaftenfenster des Form-Designers soll die BackgroundImage-Property verborgen sein?

    Dann wie Nafets gesagt hat, die Property overriden und wie angegeben attributieren.

    VB.NET-Quellcode

    1. Public Class MyFancyUserControl : Inherits Control
    2. <Browsable(False), EditorBrowsable(EditorBrowsableState.Never)> _
    3. Public Overrides Property BackgroundImage As Image
    4. Get
    5. Return MyBase.BackgroundImage
    6. End Get
    7. Set(value As Image)
    8. MyBase.BackgroundImage = value
    9. End Set
    10. End Property
    11. End Class
    Da das ganze für mich ja Neuland ist, brauche ich ein paar Erklärungen.
    Was bedeutet

    VB.NET-Quellcode

    1. <Browsable(False)
    bzw

    VB.NET-Quellcode

    1. EditorBrowsable(EditorBrowsableState.Never)
    Andoro Browser (V. 4)
    The new technology of browsing the web.
    Link to browser.
    ah, ok, gut.
    Also generell nennt man sowas Attributierung, und Attribute sind eine Art ZusatzInformation zum Datentyp. Wirklich tun tun sie gar nichts - sie sind einfach nur da, und wer will kann ihre Existenz feststellen, und darauf reagieren.
    Wird wie du siehst, viel benutzt um das Verhalten von VisualStudio zu beeinflussen, aber auch für ganz andere Sachen, etwa welche Testmethode angewendet werden soll, oder welche Member beim Serialisieren mit abzuspeichern sind, welcher TypConverter zuständig sein soll, oder whatever.

    Also ein Attribut ist etwas hinzugefügtes, was das innere Verhalten des Datentyps überhaupt nicht berührt (somit auch keine Performance-Auswirkung hat), aber als Zusatz-Information zum Typ ausgewertet werden kann.

    Lösung um mittels VB.NET Properties zu entfernen

    Ich war genauso wie "TheScripter" auf der Suche nach einer Möglichkeit ganz einfach ungewollte (vererbte) Properties zu entfernen und habe anhand einer Methode in C# die ich im Web gefunden habe das Ganze in VB.NET umgewandelt und es funktioniert perfekt.
    Wichtig dabei ist, dass ein Verweis auf die System.Design dem Projekt mit dem UserControl hinzugefügt wird.
    Hier meine Lösung:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. ' add Reference to "System.Design" for Project
    3. <DesignerAttribute(GetType(MyControlDesigner))>
    4. Public Class MetroLine
    5. Inherits MetroFramework.Controls.MetroUserControl
    6. ' gesamte UserControl Logik inkl. eigener Properties, onPaint, etc....
    7. End Class
    8. Friend Class MyControlDesigner
    9. Inherits Windows.Forms.Design.ControlDesigner
    10. Protected Overrides Sub PreFilterProperties(ByVal properties As IDictionary)
    11. ' remove each unneeded Property (Line by Line)
    12. properties.Remove("UseCustomBackColor")
    13. properties.Remove("UseCustomForeColor")
    14. properties.Remove("BackgroundImage")
    15. properties.Remove("AutoScroll")
    16. properties.Remove("AutoScrollMargin")
    17. properties.Remove("AutoScrollMinSize")
    18. properties.Remove("AutoValidate")
    19. properties.Remove("BackgroundImageLayout")
    20. properties.Remove("CausesValidation")
    21. properties.Remove("ContextMenuStrip")
    22. properties.Remove("ForeColor")
    23. properties.Remove("ImeMode")
    24. properties.Remove("RightToLeft")
    25. properties.Remove("AllowDrop")
    26. MyBase.PreFilterProperties(properties)
    27. End Sub
    28. End Class