質問

Vista では Segoe UI 9 ポイント、Windows XP などでは Tahoma 8 ポイントを使用したいと考えています。(実際には、私はどちらでも Segoe UI を使用することにしますが、ユーザーはおそらくそれをインストールしていません。) しかし、これらはまったく異なり、フォームのレイアウトを本当に台無しにします。それで...これに対処する良い方法はありますか?

例:私は持っています Label, 、真ん中に空白スペースがあり、そこに NumericUpDown コントロール。Segoe UI を使用する場合、 NumericUpDown Tahoma を使用したときと比較して、空白スペースの左側に約 5 ピクセルほどあります。これは苦痛です。ここで何をすればいいのか分かりません。

したがって、最も具体的に言えば、私の質問は次のとおりです。コントロールを空白スペースの中央に配置するにはどうすればよいですか? Labels (または CheckBoxエスなど)?最も一般的には:Windows フォームでさまざまなフォントを処理する良い方法はありますか?

編集:人々はその質問を理解できなかったと思います。私は方法を知っています フォントを変える OSに基づいて。ただやり方がわからない レイアウトの問題に対処する そうすることで生まれるもの。

ajryanさんに返信、quick_dry:はい、皆さんは質問を理解しています。MeasureString は機能するかもしれませんが、この問題を解決するためのより良い方法をさらに検討することに興味があります。

コントロールの分割に関する問題は、たとえば、 CheckBox. 。そこで、ユーザーがチェックボックスの「後半」をクリックすると(これは別個のチェックボックスになります) Label コントロールだと思います)、 CheckBox 状態は変わりません。

役に立ちましたか?

解決

あるコントロールを別のコントロール内にレイアウトする必要があるのは奇妙です。上流の問題を間違って解決している可能性があります。Windows フォームの TableLayout パネルに依存して、ラベルを上下に区切って 2 つのラベルに分割できますか?

フォントサイズに基づいて配置することが重要な場合は、次のように使用できます。 Graphics.MeasureString("アップダウン前の文字列", myLabel.Font)

フォントに依存したコントロールの配置を求めている場合は、おそらく質問のタイトルを変更する必要があります。


[編集] ラベルの「後半」部分のクリック イベントを処理し、そのイベントのチェックボックスの状態を変更できます。ただし、すべてがハックのように見えます。この奇妙なコントロール レイアウトによって解決される問題は何でしょうか?なぜラベルの真ん中にアップダウンが必要なのでしょうか?

他のヒント

次に、単一行のインライン コントロールに対する TableLayoutPanel の使用法について説明します。

通常、デザイナーで各列と最初の行を AutoSize に設定し、各子コントロールの Dock プロパティを Fill に設定します。これにより、水平レイアウトが適切に表示されるようになります。ラベル/テキストボックス間でテキストを整列させるには、TextAlign プロパティを MiddleLeft に設定します。

テキストが次の行に流れてしまう場合、簡単な解決策はありません。Graphics.MeasureString/TextRenderer.MeasureText と派手なラッピング ロジックを使用するのが最善の策です :(

まず、使用している Windows のバージョンを確認します。 オペレーティングシステム.プラットフォーム システム ライブラリのプロパティ。

2 番目に、フォント設定をリソース ファイルに置き、特定の条件 (オペレーティング システムのバージョンなど) に応じてどのリソース ファイルを使用するかを決定することができます。

ただし、個人的には、ユーザーがフォントを決定できるようにするのが良いと思います。 彼らは あなたが使用したいフォントではなく、優先してください。

最後に、以下をご覧ください。 WPF これは、解決するために設計された問題領域の 1 つであるためです。

コントロールの配置に問題があるのでしょうか?つまりフォント X と Y は OS A と B で動作し、それらのシステムで使用しているテキストに希望のレイアウトを与えることはご存知ですか?

MeasureString メソッドは、特定のフォントに縛られない方法でレイアウトを作成するのに役立つ場合があります。

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

(テキストの配置を変更すると効果があるでしょうか?私も問題を誤解しているかもしれません)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top