WinForms verankerte Steuerelemente werden nicht korrekt maximiert

8

Ich habe ein Problem mit WinForms (VB.NET).

Das Hauptfenster ist ein MDI-Container. Der Benutzer öffnet ein neues untergeordnetes Fenster:

und maximiert es dann, damit das Fenster den Clientbereich korrekt ausfüllt. Meine Steuerelemente sind ordnungsgemäß (mit der IDE-Eigenschaft Anchor) an den Fensterseiten verankert, so dass die Vergrößerung des Fensters den Client-Bereich immer gut ausfüllt:

In diesem Zustand (Client-Fenster maximiert) öffnet der Benutzer ein anderes oder ein neues untergeordnetes Fenster, aber die neuen Fenstersteuerelemente sind nicht gestreckt, dh sie "verstehen" nicht, dass sie sich strecken sollten!

Das ist besonders ärgerlich, denn wenn der Benutzer versucht, das Fenster wiederherzustellen, werden die Steuerelemente gedehnt, so dass sie verschwinden (siehe, es gibt keine Listenansicht mehr)!

Ist das ein Fehler? Wie kann ich das lösen?

edit: Nach Hans Passants Kommentar habe ich ein neues einfaches Projekt erstellt und es hat so funktioniert wie es soll. Also untersuchte ich, was sich von meinem realen Projekt und der Probe unterscheidet. Der Unterschied ist, dass ich in meinem Projekt Formulare dynamisch erstelle.

Ich erstelle dynamisch viele Buttons in einer Toolbar. Wenn der Benutzer auf eine Schaltfläche klickt, wird dieser Code ausgeführt:

%Vor%

Das heißt, der Formularname befindet sich im Schaltflächen-Tag. Ich erstelle eine neue Instanz des Formulars, mit Activator.CreateInstance(formType) , dann zeige ich es: f.Show() .

Ich bin mir ziemlich sicher, dass das Problem in dieser dynamischen Child-Formularerstellung liegt, aber ich kann nicht wo hinkommen.

edit2: Gefunden! In meiner Form war das gemeinsame Load-Ereignis, das ich gerade machte

%Vor%

statt False Ich hätte wahr schreiben sollen: myform.ResumeLayout(True)

So einfach, es tut mir leid.

    
vulkanino 07.02.2011, 17:23
quelle

4 Antworten

3

Ich habe die Lösung gefunden (danke Cody Grey, dass er vorgeschlagen hat, hier meine eigene Antwort zu veröffentlichen).

In meiner Form war das gemeinsame Load-Ereignis:

%Vor%

anstelle von False Ich hätte true : myform.ResumeLayout(True)

schreiben sollen

Einfach, aber knifflig. Danke allen.

    
vulkanino 09.02.2011, 14:38
quelle
1

Ich denke, was Sie erreichen möchten, ist mit

erledigt %Vor%

oder einer seiner Verwandten.

Beachten Sie, dass MDI-Layouts generell nicht empfohlen werden.

    
Pedery 08.02.2011 00:26
quelle
0
  
    

Meine Steuerelemente sind ordnungsgemäß verankert (mit der IDE-Eigenschaft Anchor)

  

Versuchen Sie vielleicht, das Formular zu instanziieren und die Eigenschaften im load-Ereignis programmgesteuert festzulegen.

Wenn eine Instanz funktioniert, andere dagegen nicht, müssen Sie die Eigenschaften der instanziierten Formulare mit dem Debugger überprüfen, um zu sehen, ob sie tatsächlich so eingestellt sind, wie Sie es erwarten.

    
Cocoa 08.02.2011 00:46
quelle
0

Ich habe eine datagridview auf einem mdi-Kindformular verwendet, bei dem alle vier Seiten verankert waren, und die Größe wurde richtig gewählt, solange das Formular nicht maximiert wurde. Wenn ich das Formular erstellt habe, während andere untergeordnete Objekte maximiert wurden, hat es eine falsche Größe und korrigiert sich nie, selbst wenn Sie das Formular normalisiert und in der Größe geändert haben. Meine Lösung bestand darin, ein Paneel auf das Formular zu legen, bei dem alle vier Seiten verankert waren, und das DGV in das Panel mit dem Dock-Set zu legen. Ich habe keine Ahnung, warum ich das tun musste, aber es hat das Problem behoben.

    
JohnOpincar 03.02.2017 20:43
quelle

Tags und Links