2010-08-25 14 views
15

Ich habe ein Windows-Formularobjekt, das 3 Objekte enthält, eine Baumansicht, eine Richtextbox und eine Tabsteuerung. Sie sind nicht an die Windows-Form angedockt, aber sie sind verankert (oben + links).Was hindert mich daran, mein windows-form-Objekt zu verkleinern (verkleinern)?

Ich habe den Code geschrieben, um die Größe zu ändern, wenn ein Form-resize Event-Handler aufgerufen wird, aber es scheint nur für eine Erhöhung der Formulargröße zu arbeiten, das heißt, ich kann die Größe des Formulars nicht ändern eine kleinere Größe. Dies schließt Zeiten ein, wenn ich zuerst das Hauptfenster-Formular vergrößere und dann versuche, es auf seine ursprüngliche Größe zurückzuführen.

Die Größen der drei Objekte werden nach jedem Formular manuell eingestellt unten mit dem Code der Größe:

 treeView1.Height += (this.Height - oldHeight); 
     richTextBox1.Width += (this.Width - oldWidth); 
     tabControl1.Width += (this.Width - oldWidth); 
     tabControl1.Height += (this.Height - oldHeight); 
     oldHeight = this.Height; 
     oldWidth = this.Width; 

Keines der Objekte, die eine festgelegte Mindestgröße hat (sie alle bei 0,0 während des Verkleinerungsprozesses sind)

Was verhindert, dass das Formular auf eine kleinere Größe verkleinert wird?

+0

Gibt es einen Grund, warum Sie nicht nur den Docking-Mechanismus in .NET verwenden? Es würde sich darum kümmern, die Größe für Sie zu ändern. –

+0

Docking war zu restriktiv für das, was wir gehofft hatten, GUI-mäßig. Die Position unserer Formularwerkzeuge hat die Einfachheit der Implementierung für uns überlagert. – Maixy

Antwort

18

Die automatische Größenanpassung (die für das Hauptformularobjekt festgelegt wurde) verhinderte, dass das Fenster auf eine Größe kleiner als die enthaltenen Objekte verkleinert wurde. Da die Objekte im Hauptformular bei jeder umfangreichen Größenänderung größer wurden, konnte das Hauptformular nach einem Größenwachstum nicht verkleinert werden. Durch Autosize auf dem Hauptformularobjekt deaktivieren, konnte ich die volle Kontrolle über die Größenänderung zurückgewinnen.

+2

Für alle anderen Leser lesen Sie bitte die Eigenschaft "AutoSizeMode", die standardmäßig GrowOnly ist. Das Ändern zu GrowAndShrink kann dieses Problem auch lösen (keine Versprechen). – ManEatingCheese

0

Setzen Sie einfach Ihre Controls in eine Panel und setzen Dock Eigenschaft des Panel-Fill. Ich glaube, es funktioniert auch mit Autosize auf True.

1

Rechtsklick auf Ihre Winform in Visual Studio -> wählen Eigenschaften -> Ändern Sie ihn auf Falsch

ODER

Fügen Sie diese Zeile ->Auto-Size- wird wahre eingestellt werden in Ihrem Code

this.AutoSize = false; 
4

Wenn das Obige das Problem nicht löst, überprüfen Sie, ob die Mindestgröße des Formulars nicht auf einen Wert eingestellt ist, den Sie nicht überschreiten.

0

Es gibt möglicherweise noch eine Möglichkeit, das Verhalten eines Formulars zu korrigieren, das bei normaler Mausauswahl nicht geändert werden kann.

Im Zusammenhang mit der obigen Diskussion entdeckte ich [mit VB.net in VS2010], dass einer meiner Standard-Windows-Formulare Größe nicht mit Mausauswahl ändern würde. Es ist, als ob der FormBorderStyle auf eine Form von "Fixed" festgelegt wurde. Selbst das Ändern von FormBorderStyle nach SizableToolWindow ergab nicht das erwartete Mausverhalten.

Hier sind einige Einstellungen des Formulars aus dem Formularentwurf Eigenschaften: automatisch anpassen: false Autosizemode: growonly DoubleBuffered: true Aktiviert: true Formborderstyle: Sizable ImeMode: NoControl Gesperrt: false Autoscale: Schrift AccessibleRole: Standardwert

Alle Einstellungen des Formulars für visible oder code und alle Designer-Eigenschaftseinstellungen waren identisch mit anderen Formularen im selben Projekt, die die Mausgrößenänderung zulassen würden. Das Reinigen der Lösung und das erneute Erstellen behielten das Problem der eingefrorenen Form ebenfalls nicht bei. Klicken Sie auf "Maximieren" und klicken Sie auf "Minimieren". Die Formulargröße konnte wie erwartet per Code festgelegt werden. Nur die Mausgröße des Formulars funktioniert nicht richtig.

entdeckte ich, dass die gewünschte Maus-Auswahl Redimensionierung wieder durch Einstellen in Code aktiviert werden könnte, indem die Parametereinstellung:

myForm.AutoScaleMode = Windows.Forms.AutoScaleMode.Inherit

Dieser Parameter hatte wurde im Design des Formulars auf "font" gesetzt, das auch in anderen Formen verwendet wurde, die ordnungsgemäß funktionierten.

Dann ... seltsam ... es wieder von .Inherit zu ".Font" in Code auch erlaubt das Formular die Größe richtig zu ändern.

Diese Einstellung in Code (entweder zu .Inherit oder zu .Font) schien in diesem Fall das kritische Element zum Korrigieren der Problemstellung beim Ändern der Größe von Formularen zu sein. Es scheint, dass es versteckte Parameter gibt, die das System dem Benutzer nicht zeigt, die irgendwie mit der erwarteten Operation eines Formulars interferieren.

+0

Wordy und unklar, aber auf den zweiten Blick und im Vergleich zu anderen, nicht ganz VLQ. –