3

これは、私の前の質問「フォントに依存するコントロールの配置」のフォローアップです。これは、おそらく私が尋ねていたものとは異なる方法で、その質問の背後にある実際の問題を解決する試みです。

問題の説明の例: 「読み込み後に<X> <Y>で価格を調整する」というチェックボックスが必要です。ここで、 <X>は数値です---で調整可能ですNumericUpDown---そして<Y>は「パーセント」です「または「ドル」。選択は。によって行われComboBoxます。これは1行になります。

複雑さ:レイアウトを台無しにすることなく、これらすべてのコントロールのフォントを変更できるようにしたい(基本的にSystem.Drawing.Fonts.MessageBoxFontは、Windows XP/etcではTahoma8pt、VistaではSegoe UI 9 ptに設定)。私の現在のPosition-property--settingパラダイムは機能しません。

より一般的には、 <X> NumericUpDownが "by"と<Y> ComboBoxの間のスペースにぴったりと収まり、同様に<X> ComboBoxが収まるように、コントロールをフォントに依存しない方法で動的に配置する必要があります。 <X> CheckBoxとその右側の「ロード後」の文字列に関して。

誰もが見逃しているように見える部分:これはすべて。内にネストされていCheckBoxます。したがって、理想的には、「読み込み後」という単語をクリックしてチェックボックスをオン/オフにし、「読み込み後に価格を調整する」の周りに小さなハイライトの長方形を描画する必要があります。したがって、最後に余分なものを叩くだけLabelでは機能しません。これは、CheckBox;を切り替えないためです。Label同様に、そのようなイベントをフックしてバンドエイドを試みてもClick、目的のハイライト長方形は生成されません。

ソリューション?この時点で私は次のいずれかを考えています:

  1. どういうわけか、2つの別々のテキスト行のような醜い解決策で問題を再考してください:「ロード後に見つかった価格を調整する」(CheckBox)、「調整量:」(NumericUpDownおよびComboBox)。私のオプションボックスはこのタイプ(つまり、例のタイプ)のオプションで完全にいっぱいであるため、これは本当に悪いことです。したがって、垂直方向のサイズは少なくとも2倍になります。

  2. ある種のカスタムコントロール?SplittableCheckBox

  3. コントロール付きのある種の魔法TableLayout?(これは「誰もが見逃しているように見える部分」で失敗することは間違いありません。)

  4. 諦めてMSSansSerifに戻るか、Tahomaを均一に使用するか、Segoe UIをアプリケーションにパッケージ化して、システムのデフォルトフォントを無視します。

  5. (新規、編集経由)誰かがこのシナリオを正確にサポートしていると私に納得させることができる場合は、WPFに切り替えます。

4

1 に答える 1

0

このレイアウトに従ういくつかのオプションがある場合は、ユーザーコントロールを作成してみませんか?ユーザーコントロールには、CheckBox、NumericUpDown、ComboBox、および「ロード後」のラベルが含まれます。OnFontChangedをオーバーライドして、指定されたフォントでのテキストのレンダリングに基づいてコントロールの場所を調整できます。ラベルにEventHandlerを追加して、チェックボックスをオン/オフにします。

フォーカス長方形がすべてのコントロールを囲むようにすることに関しては、その内部コントロールの1つがクリックされたときにユーザーコントロールにフォーカスを与えることができるはずです。

于 2008-09-01T21:13:01.993 に答える