我开始使用 C# 并尝试创建一个包含许多不同控件的表单。为了简单起见,我使用 aTableLayoutPanel
来处理格式。但是,我希望所有控件都集中在各自的单元格中。经过一番搜索,我找到了这个页面,它表明要这样做,您只需设置control.Anchor = AnchorStyles.None
并且控件将在其单元格中居中。
这确实工作得很好,但我现在发现了一个奇怪的行为。我现在开始构建表单,所以它完全是裸露的,上面有一个简单的图表,下面有一个文本框。完成后,图表将占据面板的整个第一行,所有其余控件将分布在其下方。
因此,我打算简单地设置panel.SetColumnSpan(graph, 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 也可以,但它有点过分了。例如,如果我想在第二行有两个 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);