私は C# を使い始めており、さまざまなコントロールを含むフォームを作成しようとしています。物事を単純にするTableLayoutPanel
ために、フォーマットを処理するために a を使用しています。ただし、すべてのコントロールをそれぞれのセル内に集中させたいと思います。いくつか検索した後、このページを見つけました。これを行うには、設定するだけcontrol.Anchor = AnchorStyles.None
で、コントロールがセルの中央に配置されることが示されています。
これは確かに非常にうまく機能しますが、奇妙な動作を発見しました。私は今、フォームの作成を開始しているので、上に単純なグラフがあり、その下に 1 つのテキスト ボックスがある完全に必要最小限のフォームです。完了すると、グラフはパネルの最初の行全体を占め、残りのすべてのコントロールはその下に配置されます。
したがって、単純に設定するつもりでしたpanel.SetColumnSpan(graph, 2)
(2列の場合)。これは期待どおりに機能しますが、下の TextBox が集中管理されていない点が異なります。
これまでのコードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Form form = new Form();
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
Chart chart = new Chart();
chart.Anchor = AnchorStyles.None;
//...
TextBox text = new TextBox();
text.Text = "A";
text.Anchor = AnchorStyles.None;
TableLayoutPanel box = new TableLayoutPanel();
box.AutoSize = true;
box.RowCount = 2;
box.ColumnCount = 2;
box.Controls.Add(chart,0,0);
box.SetColumnSpan(chart, 2);
box.Controls.Add(text,0,1);
form.Controls.Add(box);
form.ShowDialog();
}
}
}
box.SetColumnSpan
コメントアウトし
た結果は次のとおりです。
そしてそれをアクティブにします:
更新: ColumnSpan(2) を使用して TextBox を設定することもできますが、それはややポイントを超えています。たとえば、2 行目に 2 つの TextBox を配置したい場合は、それぞれのセルの中央に配置する必要があります。
この場合、2 つ目の Textbox を追加します。
TextBox text2 = new TextBox();
text2.Text = "B";
text2.Anchor = AnchorStyles.None;
それをパネルに追加します。
TableLayoutPanel box = new TableLayoutPanel();
box.AutoSize = true;
box.RowCount = 2;
box.ColumnCount = 2;
box.Controls.Add(chart,0,0);
box.SetColumnSpan(chart, 2);
box.Controls.Add(text,0,1);
box.Controls.Add(text2, 1, 1);