Frage

Ich möchte Segoe UI 9 pt unter Vista und Tahoma 8 pt unter Windows XP/usw. verwenden.(Eigentlich würde ich mich bei beiden mit Segoe UI zufrieden geben, aber meine Benutzer haben es wahrscheinlich nicht installiert.) Aber da diese ziemlich unterschiedlich sind, vermasseln sie das Layout meiner Formulare wirklich.Also...Gibt es eine gute Möglichkeit, damit umzugehen?

Ein Beispiel:Ich habe ein Label, mit etwas Leerzeichen in der Mitte, in das ich ein platziere NumericUpDown Kontrolle.Wenn ich die Segoe-Benutzeroberfläche verwende, wird die NumericUpDown liegt etwa 5 Pixel links vom Leerraum, verglichen mit der Verwendung von Tahoma.Das ist ein Schmerz;Ich bin mir nicht sicher, was ich hier tun soll.

Meine konkrete Frage wäre also:Wie kann ich Steuerelemente in der Mitte eines leeren Bereichs in meinem platzieren? Labels (oder CheckBoxes usw.)?Ganz allgemein:Gibt es eine gute Möglichkeit, mit unterschiedlichen Schriftarten in Windows Forms umzugehen?

Bearbeiten:Ich glaube nicht, dass die Leute die Frage verstanden haben.Ich weiß wie Variiere meine Schriftarten basierend auf dem Betriebssystem.Ich weiß einfach nicht wie sich mit den Layoutproblemen befassen die dadurch entstehen.

Antworte an ajryan, quick_dry:OK, ihr versteht die Frage.Ich vermute, dass MeasureString funktionieren könnte, obwohl ich an einer weiteren Erkundung besserer Möglichkeiten zur Lösung dieses Problems interessiert wäre.

Das Problem bei der Aufteilung der Kontrolle wird beispielsweise bei a am offensichtlichsten CheckBox.Wenn der Benutzer dort auf die „zweite Hälfte“ der CheckBox klickt (die eine separate wäre). Label Kontrolle, schätze ich), die CheckBox ändert den Zustand nicht.

War es hilfreich?

Lösung

Es ist seltsam, ein Steuerelement innerhalb eines anderen anordnen zu müssen.Möglicherweise lösen Sie ein Upstream-Problem falsch.Können Sie die Beschriftung in zwei Beschriftungen aufteilen, mit der Auf-Ab-Achse dazwischen, und sich möglicherweise auf ein Windows Forms TableLayout-Bedienfeld verlassen?

Wenn es wichtig ist, eine Positionierung anhand der Schriftgrößen vorzunehmen, können Sie Folgendes verwenden: Graphics.MeasureString(„String vor updown“, myLabel.Font)

Wenn Sie nach einer schriftartabhängigen Positionierung der Steuerelemente suchen, sollten Sie die Frage wahrscheinlich umbenennen.


[Bearbeiten] Sie können das Klickereignis des Teils „zweite Hälfte“ des Etiketts verarbeiten und den Kontrollkästchenstatus für dieses Ereignis ändern.Das Ganze scheint allerdings ein Hack zu sein.Welches Problem wird durch dieses seltsame Steuerungslayout gelöst?Warum braucht man in der Mitte eines Etiketts ein Auf und Ab?

Andere Tipps

Ich unterstütze die Verwendung von TableLayoutPanel für einzeilige Inline-Steuerelemente.

Normalerweise setze ich im Designer jede Spalte und die erste Zeile auf „AutoSize“ und die Dock-Eigenschaft jedes untergeordneten Steuerelements auf „Fill“.Dadurch wird das horizontale Layout richtig angezeigt.Um den Text zwischen Beschriftungen/Textfeldern auszurichten, legen Sie die TextAlign-Eigenschaft auf MiddleLeft fest.

Wenn Ihr Text in die nächste Zeile übergeht, gibt es keine einfache Lösung.Die Verwendung von Graphics.MeasureString/TextRenderer.MeasureText und einer ausgefallenen Wrapping-Logik ist die beste Wahl :(

Zunächst können Sie herausfinden, welche Windows-Version Sie verwenden Betriebssystem.Plattform Eigenschaft in der Systembibliothek.

Zweitens ist es möglich, dass Sie Ihre Schriftarteinstellungen in Ressourcendateien ablegen und abhängig von bestimmten Bedingungen (z. B. Ihrer Betriebssystemversion) bestimmen, welche Ressourcendatei verwendet werden soll.

Persönlich fände ich es jedoch schön, wenn der Benutzer die Schriftarten selbst bestimmen könnte Sie Bevorzugen Sie die Schriftart, die Sie verwenden möchten.

Abschließend möchten Sie vielleicht einen Blick darauf werfen WPF da dies einer der Problembereiche ist, die es lösen soll.

Liegt das Problem bei der Platzierung der Steuerelemente?d.h.Sie wissen, dass die Schriftarten X und Y auf den Betriebssystemen A und B funktionieren, und geben Sie dem Text, den Sie auf diesen Systemen verwenden, das gewünschte Layout?

Die MeasureString-Methode kann dabei helfen, Ihr Layout so zu gestalten, dass Sie nicht an bestimmte Schriftarten gebunden sind.

float textWidth = Graphics.MeasureString(someString, someFont).Width;

(Würde eine Änderung der Textausrichtung funktionieren?Vielleicht verstehe ich das Problem auch falsch)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top