■101097 / inTopicNo.6) |
Re[1]: テキストボックスを整列させる方法 |
□投稿者/ 魔界の仮面弁士 (3522回)-(2023/01/06(Fri) 15:17:52)
|
2023/01/06(Fri) 15:48:41 編集(投稿者)
■No101092 (河童 さん) に返信 > 縦に3個、横に3個配置した時、 > 一番上で左端にあるテキストボックスを基準に重なりがなく整列させたいです。 > 配置「左揃え」を選択して試してみると、1箇所にテキストボックスが配置されます。
同じサイズの textBox1〜9 を、3行3列に 1 2 3 4 5 6 7 8 9 と配置するものと仮定してみます。
(1) まず、textBox1 を最初に選択します。これが基準座標となります。 (2) Ctrl を押しながら残りの TextBox 群もクリックしていくか、もしくは それらをマウスドラッグで囲って、残り 8 個の TextBox も選択状態にします。 textBox1 のグラブだけが白抜き□で、それ以外のものが 黒塗り■のグラブになっていることを確認しておいてください。 (3) 「同じサイズに揃える」をクリックします。(「幅を揃える」でも可) → textBox2〜9 の 幅(と高さ)が、基準となる textBox1 と同じになります。
(4) あらためて、textBox1 だけが選択された状態にします。 (5) Ctrl を押しながら、textBox2, textBox3 を追加選択します。 textBox1 のグラブのみが白抜き□であることを確認しておいてください。 (6) ここで、「上揃え」をクリックします。 → textBox2, textBox3 の Top 座標が、textBox1 の Top 座標と同じになります。 (7) textBox1,2,3 が選択された状態のまま、「左右の間隔を削除する」をクリックして 左右ぴったり並ぶようにします。 (8) 必要に応じて、「左右の間隔を広くする」「左右の間隔を狭くする」を併用します。
(9) 同様に、textBox1 を最初に選択(□)して、textBox4 と textBox7 を追加選択(■)します。 (11) 「左揃え」を押して、Left 座標を textBox1 に揃えます。 (12) 「上下の間隔を(削除|広く|狭く)する」で上下の間隔を調整します。
(13) 上一段と左一列がの位置が決まったので、残り 4 つの TextBox は ドラッグで移動させれば青ライン(端座標)、赤紫ライン(ベースライン)が現れるので、 比較的容易に揃えられると思います。行数・列数がもっと増えてきた場合には、 これまでと同様に、基準コントロールに対して配置ボタンで揃えていくこともできます。
ただしこれは、固定サイズのフォームであることが前提です。
フォームのリサイズに合わせて、TextBox のサイズや位置を調整したい場合は Anchor プロパティを設定したうえで、FlowLayoutPanel や TableLayoutPanel などの コンテナーを併用するようにします。
> テキストボックスの重なりなく整列配置させるには、コードで処理するほかないでしょうか。 動的追加の場合、FlowLayoutPanel を使うという手もあります。 デザイン時には、FlowLayoutPanel のプロパティを AutoScroll = False FlowDirection = LeftToRight WrapContents = True の状態にしておき、そこに 複数の textBox を並べていくというものです。。 (デザイン時に追加しても良いし、プログラムから .Controls.Add しても良い)
それらの textBox は、すべて同じサイズで FlowLayoutPanel の上に 貼るようにしておけば、縦横重なることなく、きれいに整列配置されるでしょう。 各コントロールは、パネルの幅に合わせて折り返されます。 AutoScroll を True にしておけば、コントロールの数がさらに増えても スクロールで表示させることができます。
この時、各 textBox の隣り合う間隔は、各 textBox の Margin プロパティで 調整できます。また、パネルの Padding プロパティを 0 よりも 大きなサイズにすることもできます。
このほか、TableLayoutPanel というものもあります。 複雑なレイアウトにも対応できますが、リサイズやレンダリングへの 追従性能が比較的低いので、多用はお奨めしません。 TableLayoutPanel を使うべきかどうかのガイドラインが下記にあります。 https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/best-practices-for-the-tablelayoutpanel-control?view=netframeworkdesktop-4.8
|
|