« 記事改訂について | トップページ | 列挙体の値の列挙と、int->Enum 変換 »

2010年12月28日 (火)

Label の AutoSize と Image / Anchor プロパティ

Design

Label の AutoSize プロパティを True にしておくと、基本的に Text 全てを表示できるサイズに自動的に調整されるので、用途によっては重宝するプロパティだといえます。今回は、これでちょっとはまってしまった話です。

以前の記事「独自のプロパティエディタ作成(ドロップダウン形式)」で使用したドロップダウン型のプロパティエディタを、Flags 列挙体に使用出来る汎用プロパティエディタに改造しようと思い、そこそこ動くレベルまでには作成できました。

そこで、OSの表示環境が変わっても正しく表示可能な様に、コントロールの表示サイズ調整の実装を行なう事にしました。一応 C#2003 にて作成しているので、C#2005 から追加された AutoScaleMode プロパティが使用出来ません。しかしメイン部分を CheckListBox に変更している上、この CheckListBox の表示サイズ調整は、別の理由により既に実装済みだったので、簡単だろうと思っていました。CheckListBox 以外には、「閉じる」の Label が1つあるだけですから、AutoSize プロパティを true にするだけだと...

「閉じる」の Label は、"閉じる"の Text と共に、Image プロパティにて、のイメージを表示しています。AutoSize = true にすると、以下の様になってしまいます。

Autosize

うーん、Image の事は考えてくれないのね。ならば、Image 設定だけしたラベルと、"閉じる"の Text をもつ別のラベルを設ければいいだろう、と思ってやってみました。表示環境を96DPIから120DPIに変えて動作させた時の画面が、下の図です。

120dpi

せっかく Anchor プロパティを Bottom, Right に設定しているにも関らず、Anchor を突き破って表示され、イメージの半分が隠れてしまっています。
改めて Anchor プロパティの説明をみると、あくまでも親コンテナのサイズ変更に対する固定を行なうためのもので、自身のサイズ変更に対し、どこを固定端とするかではないですね。実際、Label.Width プロパティの変更でも、Anchor 設定は無関係で、右端の位置が変わります。

うーん仕様とはいえ、悩ませてくれる。結局、「閉じる」のテキストサイズを調べて、サイズ調整するしかない様です。また、Anchor を Bottom, Right にしている様に、今回の場合はサイズ変更を行なうと、位置設定も変更する必要が出てくる。まさにアチャーや(私のハンドル名:acha-ya)。

« 記事改訂について | トップページ | 列挙体の値の列挙と、int->Enum 変換 »

.NETの悩み」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Label の AutoSize と Image / Anchor プロパティ:

« 記事改訂について | トップページ | 列挙体の値の列挙と、int->Enum 変換 »