UserControl wird größer wenn die Formbreite geändert wird

  • VB.NET

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

    UserControl wird größer wenn die Formbreite geändert wird

    Hallo und guten Abend.

    Ich habe mal wieder ein Problem:
    Ein UserControl in einem TableLayoutPanel, dessen Spalte auf Absolut 32 Pixel gestellt ist verändert die Breite, obwohl sich die Breite der Spalte nicht ändert. Siehe Screenshots:

    Zuerst (im Bild ganz oben) hat die Form die Breite 181 (wie im Designer).
    Wenn man die Formbreite auf einen beliebigen anderen Wert (0 nicht getestet XD) setzt wird die Breite des UserControls (Name Button_Close) auf 32 geändert. Wenn man die Breite der Form wieder auf 181 Pixel setzt wird auch die Breite des Buttons wieder auf 32 gesetzt.
    Was mich allerdings verwirrt ist die Tatsache, dass die Breite der Spalte des TableLayoutPanels gleich bleibt (32).

    Ich befinde mich gerade im Einzelschrittdebugging in der Sub, die das Form_Load Ereignis behandelt.
    In anderen Codeabschnitten ist es das selbe Schema.

    Was allerdings (wieder mal) passiert ist, dass beim Kompilieren des Programmes 5 Fehlermeldungen (immer die gleiche) kommen:

    Das ist mir bisher nur bei diesem Projekt passiert, wenn ich in der Paint Sub eines UserControls einen Fehler gemacht habe (z.B. auf eine nicht instanzierte Variable zugreife).


    Hat jemand eine Ahnung was das sein kann?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    ja, dein Control hat wohl eine Property, die nicht serialisierbar ist.

    zb. ein Integer ist serialisierbar, ein Button aber nicht, und ein LinkContainer wohl auch nicht.

    Der Designer kann nur für serialisierbare Eigenschaften Code generieren.

    Man kanns glaub auch mit ieinem Attribut ausstellen, dass für eine Property Code zu generieren ist - glaub <DesignerSerialisationMode> oder sowas.

    Aber ob das dein Prob mit den komischen Breiten löst, weißichnich.
    Danke für den Tipp.
    Ich habe <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)>
    gefunden. Jetzt kommen keine Fehler mehr, aber auch nach dem Rausnehmen der Attribute nicht... Komisches Verhalten.

    Und nein, leider löst es das Problem mit der Breite nicht.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    aber auch nach dem Rausnehmen der Attribute nicht...

    Oh - da kommt der iwann wieder, dein Fehler.
    Es obliegt dem Designer, nach Gutdünken seinen DesignerCode neu zu generieren - nämlich genau dann, wenn es ihm beliebt.
    Ich denke, nach dem nächsten Kompilieren des Controls (ohne das Attribut), wenn es dem Designer danach iwann genehm erscheint, wird er dich auch wieder mit diesem Fehlerle beglücken. ;)
    Ach jetzt weiß ich woran es liegt (den Fehler meine ich).
    Im Direktfenster wird ausgegeben, dass in der InitializeComponent() Sub eines UserControls ein Tree instanziert (ein eigener Datentyp zum Speichern einer Baumstruktur). Das Problem ist anscheinend, dass
    Dim ContainerStack As New Stack(Of LinkContainer)
    vom Designer nicht geschluckt wird.
    Dabei habe ich aber ein Problem:
    Es wird in keinem Designer eines UserControls ein Tree instanziert (geschweige denn deklariert).
    Aber den Code so umzuschreiben, dass ContainerStack nur im Konstruktor mit Parametern instanziert wird hat anscheinend was gebracht. Mal sehen ob es später noch Fehler gibt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils