将控件集中在TableLayoutPanel中

时间:2013-03-15 19:57:06

标签: c# tablelayoutpanel

我开始使用C#并尝试创建一个包含许多不同控件的Form。为了简单起见,我使用TableLayoutPanel来处理格式。但是,我希望所有控件都集中在各自的单元格中。经过一些搜索后,我发现this page表明要这样做,你只能设置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注释掉的结果: Commented out

活跃起来:
Active


更新: 使用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);

然而,结果再次令人不满意:每个文本框显然都是“左对齐”。 Both Textboxes are left-justified http://img833.imageshack.us/img833/6924/38679737.jpg

1 个答案:

答案 0 :(得分:4)

更新:您的代码缺少列样式。只需设置为此,就完成了:

this.box.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.box.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));

要使文本框在窗体中心(TableLayoutPanel)对齐,请将列间距设置为2。如果不是,则根据文本框大小,它位于第一列的中心。

this.box.ColumnCount = 2;
this.box.RowCount = 2;
this.box.Controls.Add(this.chart, 0, 0);
this.box.Controls.Add(this.text, 0, 1);

this.box.SetColumnSpan(this.chart, 2);

this.text.Anchor = System.Windows.Forms.AnchorStyles.None;

给予

enter image description here

设置此:

this.box.SetColumnSpan(this.text, 2);

enter image description here

没有文字列跨度,但是带有文本框:

enter image description here