Mein Windows-Formular schrumpft beim Erstellen immer weiter

8

Ich arbeite an einem Windows Form-Projekt. Es enthält einen Tab-Controller mit mehreren Seiten und mehreren Steuerelementen.

Es scheint, dass nach einigen Formularänderungen vor relativ kurzer Zeit jedes Mal, wenn ich die Lösung erstellt und ausführe, die Größe des Formulars geändert / verkleinert wird.

Wenn ich also die Größe der Formularhöhe auf 768 festlege, kann ich nach dem Klicken auf "Start", um es zu erstellen und auszuführen, tatsächlich einen Blick darauf werfen, wie es sich während des Prozesses ändert, und dann lädt das Formular 21px kürzer Höhe Wert war es bei Build.

Wenn ich dann mein Projekt weiterbilde und ausführe, wird das Formular jedes Mal um 21px kleiner und wird mit jedem Build kleiner und kleiner.

Wir denken es wurde möglicherweise eingeführt, als wir den "DataGridView" -Controller zu einer der Registerkarten hinzufügten, aber noch, um zu beweisen, dass das der Fall ist.

Gibt es irgendeinen Grund, warum das passieren würde, und was könnte das tun? Warum sollte es sich während der Build-Laufzeit selbst anpassen?

Jede Hilfe oder Einsicht würde sehr geschätzt werden !!

    
Simon 24.12.2014, 07:52
quelle

5 Antworten

4

Dies ist ein nerviger Bug und ich habe selbst ähnliches Verhalten erlitten, aber es gibt vielleicht ein paar Workarounds, aber seien Sie gewarnt, diese können helfen oder nicht, und klingen ein wenig hacky

Lösung 1

Wenn Ihr Steuerelement nicht angedockt ist, kann das Andocken helfen

Lösung 2

Sie können möglicherweise Ihre Dpi-Einstellungen ändern, um das Problem zu beseitigen, zB

Anzeige-Eigenschaft- & gt; Einstellungen Tab- & gt; Fortschritt. im advance dialog habe ich die "DPI Settings" von Large (120dpi) auf Normal (96 dpi)

geändert

Lösung 3

Dies liegt möglicherweise an der AutoScaleMode-Eigenschaft. Ihre Formulare wurden möglicherweise mit anderen DPI- oder Schrifteinstellungen als in den Windows-Anzeigeeinstellungen erstellt. Versuchen Sie, die AutoScaleMode-Eigenschaft in Ihrem Formular und den entsprechenden Steuerelementen auf "Keine" zu setzen, und sie werden nicht mehr automatisch neu skaliert.

    
TheGeneral 24.12.2014 08:02
quelle
3

Das Problem

Offensichtlich gibt es einen Fehler in Visual Studio 2015. Es berechnet nicht Size richtig, wenn bestimmte Umstände erfüllt sind. In meinem Fall benutzte ich folgendes ...

%Vor%

Jetzt ... Wenn Sie dieses Formular schließen und es wieder öffnen, ist Size immer noch genau gleich (600, 170) . Wenn Sie die folgende Eigenschaft ändern ...

%Vor%

Dann schliesst du das Formular und öffnest es wieder. Du wirst bemerken, dass Size nun zu (610, 203) geändert wurde.

Meine Vermutung ist, dass der Fehler zwei Dinge nicht berücksichtigt. Einer wäre die Form Titelleiste HEIGHT. Die andere wäre das Titelleistensymbol WIDTH. Dies wäre der Offset von WIDTH of 10 pixels und a HEIGHT of 33 pixels.

Die Lösung

Nun, Sie haben tatsächlich drei Problemumgehungen. Eine wäre, die MinimumSize auszugleichen. Ein anderes wäre, das ControlBox zu zeigen. Die letzte wäre, das Problem im Code zu beheben, indem Sie die Eigenschaft ControlBox nach der Initialisierung des Formulars setzen.

Verrechnung Die MinimumSize :

Also wäre die erste Option, den Wert von MinimumSize durch (w: 10, h: 33) auszugleichen. Wenn Sie zum Beispiel möchten, dass MinimumSize (600, 170) ist, müssen Sie es auf (590, 137) setzen. Das würde tatsächlich die Größe produzieren, die Sie erwarten.

Anzeigen der ControlBox :

Ändern Sie einfach die folgende Eigenschaft ...

%Vor%

Korrigieren Sie das Problem mit dem Code:

Sie müssen die folgende Eigenschaft zur Entwurfszeit ändern ...

%Vor%

Dann müssen Sie die Eigenschaft ControlBox auf False setzen, nachdem das Formular initialisiert wurde.

%Vor%     
Arvo Bowen 23.02.2017 17:02
quelle
1

Ok, also zuerst als Antwort auf Sarumans vorgeschlagene Lösungen ..

1 - Keiner der Controller in der Anwendung, die Werte angedockt hatten. Ein paar waren verankert, aber keiner schien angedockt zu sein. Ich legte ein paar der wichtigsten Container an, die ich finden konnte, und es schien keinen großen Unterschied zu machen. Zugegebenermaßen habe ich nicht jeden einzelnen Controller angedockt, sondern bin dann auf Lösung 2 übergegangen.

2 - Ich war mir nicht sicher, wo ich die DPI-Einstellungen finden konnte. Ob irgendwo in Visual Studio oder auf meinem Rechner. So bewegt sich auf die vorgeschlagene Lösung 3 ..

3 - Beim Initialisieren des Formulars habe ich 'this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;' hinzugefügt. Dies schien dann automatisch über eine 'this.ClientSize = new System.Drawing.Size (11264,730)' Methode zu liegen, die mein Interesse weckte. Mit ein wenig weiterem Debugging scheint es, dass die 'this.ClientSize'-Eigenschaft beim Erstellen und Initialisieren der Anwendung bereits auf einen sehr niedrigen, mehr oder weniger,' 230x200 'gesetzt ist. Ich bin mir nicht sicher, woher dieser Wert kommt, aber ich frage mich, ob es etwas mit der anfänglichen Größenänderung zu tun hat, bevor es dann versucht, es wieder auf etwas Größeres zu setzen.

Unabhängig davon stieß ich auf einen anderen Vorschlag, möglicherweise die Mindestbreite und -höhe meiner Form zu überprüfen und bemerkte, dass sie auf 0x0 gesetzt waren, nehme ich standardmäßig an.

Also habe ich die min-Werte so eingestellt, dass sie mit der Größe meines Formulars übereinstimmen, und bei nachfolgenden Builds scheint es jetzt seine Größe zu behalten! Oder zumindest schrumpft es nicht mehr von dem, was ich erzählen kann.

Ich bin mir nicht sicher, ob das Einstellen der minimalen Formulargröße eine akzeptable Lösung für dieses bizarre Verhalten ist, aber bis jetzt scheint es, die App-Größe bei jedem Build konsistent zu halten, was momentan eine Erleichterung ist.

>

Wenn jemand weitere Kenntnisse über die ClientSize-Eigenschaft hat und wenn ich zu Recht Bedenken über seine anfängliche geringe Größe habe, wäre es großartig, sie zu hören. :)

    
Simon 24.12.2014 09:50
quelle
1

Ich habe es herausgefunden! Wenn Sie auf das Formular in klicken "Entwurfsansicht" & gt; "Eigenschaften" & gt; "MinimizeBox" und ändern Sie "True" zu "False".

    
Rody Davis 15.12.2016 17:29
quelle
1

Ich hatte dasselbe Problem. Meine Lösung:

Das System meines PCs ist Windows 10. Die Auflösung des Monitors war 12515 und ich habe es auf 100% eingestellt. Dann setze ich die Größe des Formulars nicht verändert.

Sie können die Einstellungen für die Auflösung in diesem Bild sehen:

Auf Türkisch "Scale" ist "Ölçekle". Es gibt Auflösungsoptionen auf der Unterseite ("ölçekle ve düzenle").

    
Abdulkadir Avcı 10.07.2017 16:55
quelle