CustomControl-Property Änderungen zur DesignTime

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    CustomControl-Property Änderungen zur DesignTime

    Hallo,

    ich bin derzeit an der Entwicklung eines Custom Controls. Dieses Control leitet von System.Windows.Forms.Panel ab und besitzt eine Eigenschaft DCollection welche Objekte von einem bestimmten anderen Control beinhaltet.

    Das Custom Control, welches die Collection besitzt, soll diese anzeigen und für die Anordnung dieser sorgen, das klappt bisher alles ganz gut. Folgendes Problem:

    Wenn ich die Property DCollection zur DesignTime ändere und ihr z.B. ein neues Control hinzufüge, wird das Custom Control nicht geupdatet. Die Änderungen an der Collection sind zwar gespeichert im DesignerCode der Form aber die Änderungen werden nicht dargestellt. Das liegt daran, dass die Methode, welche für das Anordnen der Controls in der Collection zuständig ist, nicht aufgerufen wird.

    Meine Frage ist nun, ob ich irgendwie abfangen kann, wenn zur DesignTime diese Collection-Property geändert wird, und ob ich dann eine Methode des Custom Controls aufrufen kann. Ich dachte da an sowas wie einen Designer der ein Event aufruft wie PropertyChanged und ich in diesem dann per CustomControl.Methode die Methode aufrufen kann. Bin für jede Hilfe dankbar.

    Grüße, Atrion.
    Willkommen im Forum. :thumbup:
    Pack mal in die Load-Prozedur Deines Controls so etwas rein:

    VB.NET-Quellcode

    1. If Me.DesignMode Then
    2. ' Code, der zur Design-Zeit asgeführt werden soll
    3. End If
    Möglicherweise hast Du einen Fehler in der Load-Prozedur, diese wird dann ohne Exception gnadenlos abgebrochen.
    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!

    VB.NET-Quellcode

    1. If Me.DesignMode Then
    2. ' Code, der zur Design-Zeit asgeführt werden soll
    3. End If

    Danke dir, das ist leider nicht das was ich brauche. Ich muss nach dem die Property sich geändert hat, eine Methode des Custom Controls aufrufen. Allerdings hast du damit gerade ein anderes meiner Probleme gelöst. :)

    VB.NET-Quellcode

    1. System.ComponentModel.RefreshPropertiesAttribute

    Das habe ich bereits auch schon ausprobiert, hat nicht funktioniert. Ich denke das Attribut updated das PropertyGrid nachdem sich diese Propertygeändert hat, nicht aber mein Control. Danke dir aber trotzdem dafür.

    Ich lasse jetzt die Methode, die für das Anordnen der Controls in der Collection zuständig ist, im Paint Ereignis des Controls aufrufen. Das bewirkt zwar nicht, dass die Änderungen sofort nach dem Ändern der Property sichtbar sind, dies allerdings der Fall ist, wenn das Control z.B. in seiner Größe geändert wird. Dieses Verhalten gefällt mir persönlich noch nicht so gut aber es ist schonmal etwas besser als vorher.

    Im Moment bin ich dabei mir einen eigenen UITypeEditor zu erstellen für die Property. Vielleicht bekomme ich es damit hin. Falls ich das Problem irgendwie gelöst bekomme werde ich mich hier nochmal melden. Bin selbstverständlich für weitere Ansätze jederzeit dankbar.

    Danke für die Hilfe,
    Atrion.

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

    @Atrion: Es ist nicht erforderlich, dass Du alle Beiträge über Deinem vollständig zitierst.
    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!