Meine Windows-Form hält Sie auf verkleinern/Größenänderung auf bauen
Ich arbeite auf einem Windows Forms-Projekt. Es enthält eine Registerkarte controller mit mehrere Seiten und mehrere Steuerelemente auf den einzelnen.
Scheint es, dass in relativ kurzer Zeit, nach einigen Formänderungen, dass jedes mal, wenn ich zu bauen, und führen Sie die Lösung die form ändert/verkleinert.
Also, wenn ich die Größe des Formulars der Höhe auf 768, sobald ich auf 'Starten' zu bauen und führen Sie es aus, ich kann tatsächlich zu fangen, einen Blick auf Sie Größenänderung sich während des Prozesses und dann das Formular geladen 21 Pixel kürzer als die Höhe der Wert, den es war zu bauen für.
Wenn ich dann aufrecht und läuft mein Projekt, wird das Formular Rückgang von 21 Pixel jedes mal, so dass es kleiner und kleiner mit jedem build.
Wir denke könnte es eingeführt worden, wenn wir das 'DataGridView' controller auf eine der Registerkarten, aber wir haben noch zu beweisen, wenn das der Fall ist.
Gibt es einen Grund, warum würde dies geschehen, und was sein könnte, dies zu tun?
Warum sollte es die Größe sich während des build-Laufs Zeit?
- Ist es reproduzierbar Verhalten? Können Sie neues Projekt erstellen, stellen einige Aktionen und erhalten dasselbe Ergebnis? Wenn nicht - habe ich wirklich Zweifel, einige hier können dir helfen mit diesem Problem.
- Danke für die Antwort. Werde versuchen, sehen, ob ich das reproduzieren kann, die bahaviour auf ein sauberes Projekt, aber da das Projekt ziemlich Komplex ist Im besorgt, es könnte einige Versuch und Irrtum zu finden, die genaue Aktion, die ursprünglich verursacht dieses Verhalten. Ich bin mehr gehofft, wenn jemand anderes hier erlebt hat, ein ähnliches Verhalten oder ist sich bewusst, irgendwelche bekannten Macken, die Dinge produziert wie dieser. Vielleicht sogar noch besser, wie man vielleicht vermeiden, die form, um die Größe von selbst an zu bauen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein ärgerlicher bug, und ich erlitten haben, ein ähnliches Verhalten mich. Jedoch, es gibt vielleicht ein paar workarounds, die aber seien Sie gewarnt, aber diese kann oder kann nicht helfen und Klang ein wenig hacky.
Lösung 1
Wenn das Steuerelement ist nicht angedockt, andocken kann helfen.
Lösung 2
Können Sie möglicherweise ändern Sie Ihre DPI-Einstellungen um das problem zu beseitigen, d.h.:
Eigenschaften von Anzeige → Einstellungen Registerkarte → Erweiterte. In der Erweiterte dialog, den ich geändert, die "DPI-Einstellungen" aus Großen (120 dpi) Normalen (96 dpi).
Lösung 3
Dies ist vielleicht aufgrund AutoScaleMode-Eigenschaft. Ihre Formen sind so konzipiert, mit einem anderen DPI-oder schriftart-Einstellungen haben, als Sie jetzt in der Windows-Anzeige-Einstellungen. Versuchen Sie, die AutoScaleMode-Eigenschaft auf None, die in Ihrer form und beleidigenden Kontrollen, und Sie werden nicht automatisch die Größe neu mehr.
Solutions
gearbeitet und hatte keine Wirkung auf mein Problem (das ist wie die Frage gestellt). Dies ist auf einen bug im VS2015 wie beschrieben in meiner Antwort stackoverflow.com/a/42421969/1039753.Das Problem
Anscheinend gibt es einen bug in Visual Studio 2015. Es ist nicht die Berechnung der
Size
richtig, wenn bestimmte Umstände erfüllt sind. In meinem Fall war ich mit den folgenden...Nun... Wenn Sie schließen Sie das Formular und öffnen Sie es wieder auf den
Size
ist immer noch genau das gleiche (600, 170). Wenn Sie ändern Sie die folgende Eigenschaft...Dann schließt das Formular und öffnen Sie es wieder auf, Sie werden bemerken, die
Size
wurde jetzt so geändert, (610, 203).Meine Vermutung ist, dass der bug nicht Buchhaltung für zwei Dinge. Wäre die form der Titelleiste HÖHE. Das andere wäre der Titelleiste Symbol BREITE. Dies wäre der offset des
WIDTH of 10
Pixel und eineHEIGHT of 33
Pixel.Die Lösung
Gut, Sie haben tatsächlich drei Möglichkeiten. Würde man den Versatz
MinimumSize
. Ein weiterer wäre, tatsächlich zeigen dieControlBox
. Das Letzte wäre um das Problem zu beheben, die im code durch die Einstellung derControlBox
- Eigenschaft, nachdem das Formular initialisiert wird.Verrechnung Der
MinimumSize
:Also die erste option wäre, offset, was Sie wollen, die
MinimumSize
werden durch (w:10, h:33). So zum Beispiel, Wenn Sie wollen, dass dieMinimumSize
werden (600, 170) dann müssen Sie es zu (590, 137). Das wäre eigentlich produzieren die Größe, die Sie erwarten zu sehen.Zeigt die
ControlBox
:Ändern Sie einfach die folgende Eigenschaft...
Korrigieren, das Problem mit code:
Müssen Sie ändern Sie die folgende Eigenschaft zur Entwurfszeit...
Dann Sie benötigen, um die
ControlBox
EigenschaftFalse
nachdem das Formular initialisiert wird.Ich hatte das gleiche problem. Meine Lösung:
Mein PC system ist Windows 10. Die Auflösung des Monitors war auf 125%, und ich habe es zu 100%. Dann setze ich die Größe des Formulars nicht geändert.
Sehen Sie die Einstellungen für die Auflösung in diesem Bild:
In der türkischen "Skalieren" ist "Ölçekle". Es werden die Auflösung-Optionen auf der Unterseite ("ölçekle ve düzenle").
Habe ich es herausgefunden!
Wenn Sie klicken Sie auf die form, in "Design-Ansicht" → "Eigenschaften" → "MinimizeBox"
und ändern "True" zu "False".
OK, also erstmal die Antwort auf Saruman vorgeschlagenen Lösungen.
Keiner der Controller in der Anwendung, wo hatte angedockt Werte. Ein paar gute verankert waren, aber keiner erschien angedockt. Ich dockte ein paar der wichtigsten Container, die ich finden konnte, und es schien keinen zu großen Unterschied machen. Zugegeben, ich habe nicht dock jedem einzelnen controller, aber ich zog mich dann auf die Lösung 2...
Ich war nicht sicher, wo finden Sie die DPI-Einstellungen. Ob irgendwo im Visual Studio, oder auf meinem Rechner. So zog ich auf die vorgeschlagene Lösung 3...
Auf dem Formular initialisieren, ich habe 'diese.AutoScaleMode = System.Windows.Formen.AutoScaleMode.None;'. Dies schien dann automatisch platzieren Sie es oberhalb eines 'dieser.ClientSize = new System.Zeichnung.Größe(11264,730)' - Methode, die hat mein Interesse geweckt.
Mit ein wenig weiter Debuggen, es scheint, dass, wenn die Anwendung erstellt und intializes, die 'das.ClientSize' - Eigenschaft ist bereits auf einem sehr niedrigen, mehr oder weniger, '230x200'. Ich bin nicht sicher, wo dieser Wert herkommt, aber ich Frage mich, ob es hat nichts zu tun mit der ursprünglichen Größenänderung, bevor es dann versucht, es wieder etwas größer...
Unabhängig, stieß ich auf einen anderen Vorschlag um eventuell doppelte check meine form ist minimum width-und height-Eigenschaften, und bemerkt, Sie waren auf 0x0 gesetzt, ich nehme an, standardmäßig.
So, ich habe die minimum-Werte werden die gleichen wie meine form Größe Wert, und bei nachfolgenden builds scheint es zu sein, halten jetzt seine Größe! Oder zumindest nicht schrumpfen mehr von dem, was ich erzählen kann.
Ich bin mir nicht sicher, ob die Einstellung der minimalen form die Größe ist eine akzeptable Lösung für dieses bizarre Verhalten ist, aber bisher scheint es zu halten die Anwendung Größe konsistent auf jedem build, das wir tun, ist eine Erleichterung in dem moment.
Wenn einer hat, weitere Erkenntnisse über die ClientSize-Eigenschaft und wenn ich mich Recht besorgt zu sein über seine anfängliche geringe Größe, wäre toll es zu hören. 🙂