gpt4 book ai didi

c# - 将控件集中在 TableLayoutPanel 中

转载 作者:行者123 更新时间:2023-11-30 20:59:36 25 4
gpt4 key购买 nike

我开始使用 C# 并尝试创建一个包含许多不同控件的表单。为了简单起见,我使用 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 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

最佳答案

更新:您的代码缺少列样式。就这样设置,你就完成了:

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

关于c# - 将控件集中在 TableLayoutPanel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com