Windows Form wird falsch Dargestellt

  • C#
  • .NET (FX) 4.0

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Windows Form wird falsch Dargestellt

    Moin,
    ob VisualStudio die alten oder die Aktuelle 2017er Version bis hin zu SharpDeveloper habe ich das selbe Phänomen.

    Immer wenn ich "FormBorderStyle" nicht auf "Sizable" stehen habe, werden die Buttons nach den Compilieren, an der falschen stelle dargestellt.

    Bild 1: RichtigInDesinger.png
    Hier sieht in VisualStudio alles noch super aus und "FormBorderStyle" steht auf "FixedSingle".

    Bild 2: FalschNachCompilieren.png
    Hier ist der Button ganz nach unten verschwunden, so dass man ihn nicht mehr sieht.

    Jemand ne Idee? Habe den Bug schon sehr lange und er nervt langsam echt. Selbst eine Windows neu Installation hat nicht geholfen.

    Weiter Daten:
    - FormBorderStyle = FixedSingle
    - ControlBox = false
    - MaximizeBox = false
    - Size = 300; 150
    - StartPosition = CenterScreen

    mehr habe ich nicht geändert.
    Bilder
    • RichtigInDesigner.png

      5,29 kB, 331×181, 235 mal angesehen
    • FalschNachCompilieren.png

      4,97 kB, 296×129, 149 mal angesehen
    Wie man an den Bildern sehen kann, ist die Formhöhe eine ganz andere. Ich vermute bei dem Punkt, dass die me.Size-Angabe die Arbeitsflächengröße ist - aber die Titelleiste da nicht mit einberechnet wird. Die Button-Position lässt sich ja nach Programmstart ausgeben. Und die dürfte mit den Designerangaben übereinstimmen, richtig? Was sagt denn der Compiler zu Me.Height nach dem Programmstart?

    EDIT: dass die me.Size-Angabe die Arbeitsflächengröße komplette Höhe ist - aber und die Titelleiste da nicht mit einberechnet wird.
    Auch wenn Du in C# arbeitest, probier mal folgenden VB-Code einzuarbeiten. Statt mit Me.Size die Höhe auf 150 zu setzen, testweise:

    VB.NET-Quellcode

    1. Me.Height = 150 + Me.PointToScreen(New Point(0, 0)).Y - Me.Location.Y

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    @Pardasus Gib dem Button die Property .Anchor = Unten Or Rechts.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sieht mir auch ganz nach nem Anchor problem aus. Wenn der Button den Anchor "oben" hat denn behällt er den Abstand nach Aben bei wenn die Form in der Größe verändert wird.
    Ein Button der an der Unteren Ecke "fest" hängen soll, muss also wie RodFromGermany geschrieben hat die Anchor unten und rechts habe sonst fällt er aus dem angezeigen Bereich raus.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Irgendwie kann das ja nicht richtig sein.

    Jetzt habe ich zwei Textboxen hinzugefügt. Im Designer von VisualStudio schaut es super aus und nach dem Compilieren kommt etwas ganz anderes bei rum.
    Ich dachte damals, dass wäre ein Bug. Aber als dieses auch in der 2017er Version und in SharpDeveloper aufgetreten ist, soll das wohl ein Feature sein?!
    Bilder
    • Designer.png

      3,32 kB, 308×159, 187 mal angesehen
    • AfterCompilier.png

      1,42 kB, 279×112, 1.648 mal angesehen

    Pardasus schrieb:

    Irgendwie kann das ja nicht richtig sein.
    Das ist richtig, Du hast es nur nich nicht verinnerlicht.
    Deine Vor- und Nach-Bilder sind verschieden hoch, das bedeutet, dass sie während der Laufzeit resized werden.
    Anchor bedeutet, dass die Controls an die betreffenden Seiten geheftet werden, wenn die Form resized wird.
    Wenn der Button unten klebt, Deine TextBoxen oben, ist ja wohl klar, dass sie sich beim Verkleinern der Form iwann überschneiden.
    Wenn sie das nicht tun sollen, musst Du Deine Form layouten, d.h., Du musst mit Hilfe von Panels (und Panels in Panels) Deine Controls so anordnen, dass das nicht passiert.
    Gugst Du TableLayoutPanel und SplitContainer.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Pardasus: Ich hatte das Problem früher auch, wenn ich unter bestimmten Umständen einen FormResize durchgeführt habe. Leider kann ich den Fall nicht mehr reproduzieren, denn das war, bevor ich Versionskontrolle nutzte, von daher ist der Fehler (für diesen Fall bedauerlicherweise) nicht mehr nachzubauen. Ich weiß nur, dass ich es mit dem Code aus Post 3 beheben konnte. Häng doch mal bitte Dein Testprojekt an. Ich selber bekomm den Fehler nicht mehr nachgestellt.
    Ich habe zwar bemerkt, dass, wenn man die Formgröße im Designer festlegt, diese dann aber im Programm ausliest, sie kleiner ist, als im Designer angegeben. Aber die Darstellung/Positionierung der CEs (Buttons, ...) bleibt bei mir korrekt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    wenn man die Formgröße im Designer festlegt, diese dann aber im Programm ausliest, sie kleiner ist, als im Designer angegeben.
    Ich könnte mir vorstellen, dass das zusammenhängt mit der Darstellung der Formen unter unterschiedlichen Windows-Betriebssystemen.
    Da könnte man ja ein paar Testdaten zusammentragen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Dksksm: Und ich eben nicht, wahrscheinlich, wie @RodFromGermany meinte, da ich u.U. mit nem anderen BS arbeite: Win10

    EDIT: und mit anderer Sprache: VB.Net
    Bilder
    • Datenzusammenfassung.jpg

      71,9 kB, 612×590, 315 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Das ist ja sehr interessant.
    Ich hab eien Standard-Form, 300 x 300 Pixel:

    Er selbst sagt, dass er 300 x 300 Pixel groß sei, der IrfanView überführt ihn der Lüge:

    286 x 293 Pixel.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ganz Wichtig um den "Fehler" nachzustellen ist, dass man den "FormBorderStyle" auf "FixedSingle" stellt im Designer. Sobald diese auf "Sizable" steht ist alles wieder richtig.

    Was ich mir vorstellen könnte das dies wirklich ein Bug ist. Denn bei "FixedSingle", berechnet VisualStudio und Co. trotzdem den möglichen Scrollbalken dazu und vergisst das es eine Fenster-Leiste oben gibt. Wenn man sich den Code vom Designer anschaut, steht bei der Windows Form

    C#-Quellcode

    1. ​this.ClientSize = new System.Drawing.Size(284, 111);
    und im Designer 300x150.
    Wenn ich aber im Code die Werte auf 300x150 anpasse, wird das Fenster nach dem Compilieren viel zu groß.

    @RodFromGermany
    ich habe es mal mit "Panels" probiert, wird aber nicht besser. Im Designer wieder alles Top, nach dem Compilieren alles schrott...
    Ich kann lesen, abver dennoch den Fehler nicht nachstellen, trotz Windows 10 auf einem Rechner (inkl. VS 2017).
    Das mit der ClientSize stimmt auch mit dem Designercode bei mir überein. Aber noch einmal: Den von Dir gezeigten Effekt habe ich nicht nachstellen können, auf keinem Entwicklungsrechner in meinem Zugriff (meist Win 7 der Firma aber Win 10 zuhause). Es spielt auch keine Rolle, ob ich eine Standardform unverändert hernehme oder mit den von Dir proklamierten Einstellungen. Bei mir sind die Messungen immer gleich (ja nach Tool mal die Werte die auch im Designer stehen, oder mit Greenshot bzw. anderen Bildbearbeitern auch die veringerten Werte). Ebenso spielt es keine Rolle ob ich VB.Net oder C# hernehme, dürfte aber ohnehin keine Unterschied machen.
    Ich hab es nun hinbekommen.

    Alles muss "Anchor" überall auf "Top, Left" stellen und im Quelltext vom Designer von "284, 111" auf "300, 150" stellen. Danach wird es nach den Compilieren richtig Angezeigt, aber sieht im Designer total falsch. Für mich kann das nur ein Bug sein.

    @Dksksm
    Ich glaube dir das der Fehler bei dir nicht auftritt. Aber ich habe sogar den Rechner neu Installiert und sogar mit SharpDeveloper exakt immer den gleichen Fehler, sollte ich etwas anderes als "Sizable" einstellen.
    Frage mich, was bei dir anderes ist das es nicht passiert.

    EDiT:
    jetzt weis ich was schuld ist. Wenn ich im Designer "ControlBox = False" setzte, passiert der Fehler. Stelle ich ihn zurück auf "True" wird nicht nur im Designer alles richtig Dargestellt, sonder auch nach dem Compilieren!
    Das würde ich aber schon als Bug bezeichnen.
    Bilder
    • FlaschImDesignerRichtigNachCompilieren.png

      3,5 kB, 325×200, 202 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Pardasus“ ()

    Windows 8.1, VS2017 => Ich kann das Problem nicht nachstellen. Was steht im Designer bei dir bei AutoScaleDimensions? Ist es: ​this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); oder was anderes? Ich hatte das aber auch schon mal beim meinem Laptop, da habe ich eben diese Werte und AutoScaleMode auf false gesetzt und dann ging es wieder.

    Du hast aber direkt im ersten Post die Frage von nafets gar nicht beantwortet oder habe ich das überlesen? Hast du eine Skalierung im Windows eingestellt?: