プロが教えるわが家の防犯対策術!

C# のテキストボックスデザインについて

複数のテキストボックスを結合して並べたいのですが、フォームをスケーリングしている為、
解像度によって、テキストボックスの行間が変わり、デザインが変わってしまいます。

以下サイトや添付ファイルの様に、複数のテキストボックスの行間をひっつけて固定させたいと思っています。
http://www.grapecity.com/japan/special/multirow/

現在(スケーリングの際にAとBの間がまちまちになってしまう)
――――――――――――――――
テキストボックスA
――――――――――――――――
――――――――――――――――
テキストボックスB
――――――――――――――――

やりたい事
――――――――――――――――
テキストボックスA
――――――――――――――――
テキストボックスB
――――――――――――――――

どなたかご存じの方がおられましたら、アドバイスよろしくお願いいたします。
参考になるサイト等もあれば、併せてご教授願います。m(__)m

「C# のテキストボックスデザインについて」の質問画像

A 回答 (1件)

想定されているのは、レイアウトやフォントサイズが変わったとき、動的にControl間を隣接するように調整するということですよね。



プログラムで調整するなら、ロード時ではなくてリサイズイベントで行うようにしてください。
質問番号:6161003 http://oshiete.goo.ne.jp/qa/6161003.html と同じ質問ですよね。

一般的に、Formサイズを基準にして個々のコントロールの配置やサイズを計算すればいいのですが、混乱されているようですね。

この場合、TextBox Controlを基準にします。なぜなら、TextBoxは融通がきかなくて高さはフォントサイズに自動調整されます。強引に高さを変更しても元に戻ってしまうのです。

したがって、TextBoxを基準に隣接するように配置し、Labelの高さはTextBoxの高さに調整します。

---------------------------------------------------------------------------

別のアプローチもご紹介します。
標準Controlを使って、レイアウトを動的に配置する方法(一例)です。

1.TableLayoutPanelコントロールをベースのコンテナとします。
  TableLayoutPanel.Dock=Fill この場合、Form全体に張り付きます。
  列=2,行=3にして、それぞれの比率は均等あるいは適当な設定をします。
  CellBorderStyleプロパティをSingleにすると枠線を表示できます。
2.Label ControlとTextBox ControlをTableLayoutPanelのセルに当てはめます。
3.Label ControlのDockプロパティを同様にFillに設定します。
  細部のプロパティ設定を行います。
4.TextBox ControlのAnchorプロパティを”Left, Right”に変更します。(中央に配置)

※TableLayoutPanelの詳細については、MSDNなどを参照してください。
※TableLayoutPanelをForm内の他のコンテナにDockingするとそのコンテナサイズ内で自動調整されます。

TableLayoutPanelのセルには一つのControlしか貼り付けることができません。その場合は、多少面倒ですがTableLayoutPanelを入れ子にすることで結構複雑なレイアウトにも対応できます。

●TableLayoutPanelをうまく活用すると、面倒なレイアウト調整プログラムを極力回避することができます。

補足

角丸の枠線は、標準Controlではできませんので対応するとすれば、市販コントロールを使うか独自に描画するコントロールを作成するしかありません。(解説は省略)


[プログラミングの家庭教師]
「C# のテキストボックスデザインについて」の回答画像1
    • good
    • 0
この回答へのお礼

いろいろアドバイスありがとうございます。

TableLayoutPanelは一度試したのですが、入れ子にするのは考えていませんでした。
一度試してみます。

>>角丸の枠線の、標独自に描画するコントロールを作成。

の方法が出来れば知りたいです。
もし、お時間があれば、教えていただけないでしょうか?

この辺りの情報が載っているサイトを、発見できず、苦しんでいます。
ぜひ、教えてほしいです。
よろしくお願いいたします。m(__)m

お礼日時:2010/09/09 22:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!