标签: tablelayoutpanel

TableLayoutPanel:删除行

我有一个 TableLayoutPanel,它在运行时使用文本文件填充行(从文本文件中获取每一行,并将其放入包含在新行中的单元格中)。代码如下所示:

public static string UrlList= @"C:\Users\Berisha\Desktop\URLs.txt";
string[] UrlRows = System.IO.File.ReadAllLines(@UrlList);
        private void InitPaths()
    {
        int a = 0;
        int c = 1;
        while (a < UrlRows.Length-1)
        {   
            //new label
            var label = new Label();
            label.Dock = DockStyle.Fill;
            label.AutoSize = false;
            label.Text = UrlRows[a];
            label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            label.Size = new System.Drawing.Size(22, 13);
            label.BackColor = System.Drawing.Color.Transparent;
            TBP.Controls.Add(label, 3, c); //Add to TableLayoutPanel
            a++;
            c++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

虽然我希望能够手动编辑源代码,所以我写了一个方法来删除新创建的所有内容,但似乎卡在这里,因为它不起作用:

        private void clearPaths()
    {   
        int c = UrlRows.Length - 1;
        while (c <= UrlRows.Length …
Run Code Online (Sandbox Code Playgroud)

c# tablelayoutpanel tablelayout winforms

3
推荐指数
2
解决办法
1万
查看次数

将控件添加到 TableLayoutPanel 的快速方法

我必须动态地添加很多Control对象TableLayoutPanel,这需要花费大量时间。我还需要能够通过 的行和列索引访问控件,TableLayoutPanel反之亦然。

TableLayoutPanel.Controls有(据我所知)3 种添加Control对象的方法:

  • .Add(Control) - 继承,位置为 -1,-1 与 .GetCellPosition(Control)
  • .Add(Control, column, row) - 位置和索引是正确的,但可能有点慢?
  • .AddRange (Control[]) - 继承的,更快的,显示的位置是正确的(每个单元格都被填充,如果有必要,在之后设置列跨度),但位置是-1,-1 .GetCellPosition(Control)

有没有一种方法结合的优势.Add(Control, column, row.AddRange(Control[]),即大量的添加Control对象快的TableLayoutPanel同时仍然能够获得的位置Control编程?


编辑以包含评论中的一些信息:

  • 添加了多达 1000 个控件
  • 我已经使用SuspendLayout()ResumeLayout()
  • TableLayoutPanel需要约2秒至负载。根据分析器,大约 50% 的时间花在添加控件上,20% 的时间花在添加控件上ResumeLayout()

编辑:MCVE
我的原始代码更复杂,但这是TableLayoutPanel添加控件花费大部分时间(2/3)的示例。我正在寻找一种方法来加快速度。

public class FormTLPTest : Form
{
    public FormTLPTest()
    {
        Height = 800;
        Width = 800;

        TableLayoutPanel tlp = …
Run Code Online (Sandbox Code Playgroud)

.net c# tablelayoutpanel winforms

3
推荐指数
1
解决办法
3850
查看次数

SuspendLayout/ResumeLayout是否毫无价值,还是我错了?

我有两个托管TableLayoutPanels的标签页,我用标签和文本框动态填充.第一个获得96个标签和96个文本框,其闪烁是可接受/可容忍的,所以我没有费心添加SuspendLayout/ResumeLayout对.

然而,第二个获得96个标签和288个文本框,其绘画/闪烁是无法容忍的.IOW,192个控件似乎没问题,但384肯定不行.

我在动态创建控件之前调用SuspendLayout,然后在finally块中调用ResumeLayout,但删除了它们,瞧!像第一个tabPage/TLP一样,闪烁是可以接受的.

为什么减法加法有效呢?

c# tabs dynamic tablelayoutpanel winforms

2
推荐指数
1
解决办法
7204
查看次数

将控件添加到tableLayoutPanel

我想知道是否可以在单个tableLayoutPanel中添加多个项目?目前,我只能插入一个项目,它不会接受任何其他内容.我想要一个包含标签和按钮的richtextBox.有可能吗?谢谢!我不是要求代码,我只需要知道是否可以手动将这些项拖放到tableLayoutPanel中的单个单元格中.

c# tablelayoutpanel

2
推荐指数
1
解决办法
3723
查看次数

TableLayoutPanel将标签控件放在列内

有了TableLayoutPanel的所有属性,我不知道为什么这不简单.

我有一个tableLayoutPanel有两列.我试图在第一列中放置一个标签,以将其用作标题.我想将它放在相对于列的特定坐标中,但我不知道如何使用边距或填充属性.必须有一个比这更简单的方法.我尝试过使用锚点和停靠属性,但没有用.

有人能告诉我一个如何做到这一点的例子吗?为什么我不能将标签拖到我想要的位置?

c# tablelayoutpanel winforms

2
推荐指数
1
解决办法
4098
查看次数

在TableLayout中隐藏一行

我有一个包含三行和一列的表格布局:

在此输入图像描述

我想要的是在进度完成之前隐藏第二行,如下所示:

在此输入图像描述

在互联网上,我发现了两件事:

  1. 删除行 - 我不想删除该行,只是暂时隐藏它!
  2. 将行高设置为0 - 不起作用,由于某种原因,部分内部数据仍然可见.

那么我该如何真正隐藏这一行呢.不删除,不调整大小但实际上将其隐藏起来.

.net c# tablelayoutpanel

2
推荐指数
1
解决办法
1298
查看次数

TableLayoutPanel标签是否向左上方?

我有一个TableLayoutPanel,每当我将标签放入其中一个单元格时,它就会捕捉到左上角.我怎样才能做到这一点或改变它的位置.

此外,是否可以更改特定单元格的背景颜色?

谢谢!

c# label tablelayoutpanel winforms

1
推荐指数
1
解决办法
3698
查看次数

C# - TableLayoutPanel切断标签字符串

我正在创建一个表格布局面板来显示字典中的值,但是表格布局面板不断切割我放入单元格的14个字符的Label控件.我试图摆弄我的表布局面板的ColumnStyles,但没有一个选项会使Label控件真正"适合"进入单元格.我已经尝试了所有可用的列样式SizeTypes:

自动调整大小(带有文本值的标签每次都会裁剪为14个字符("1234567890ABCD"),尽管没有控件的列(间隔符)会缩小为空)

百分比(没有任何影响 - 即使我将列类型(值,键,空格)加权为不同大小,也没有列更宽.)

绝对(使列x像素宽,但标签仍然以14个字符切断 - 即使单元格宽度为1,000像素)

我也试过搞乱标签的Size属性,但我无法编辑,因为我"无法修改'System.Windows.Forms.Control.Size'的返回值,因为它不是变量"(无论如何)这意味着).

因此,在完成所有这些选项后,如何使完整标签出现在表格单元格中而不会被切断为14个字符?

这是生成表格布局面板的代码.它使用我构建的自定义类(GridDisplay)来保存包含Control,行号,列号和一些其他字段的对象列表(GridDisplayCell).该类允许我添加/删除/移动/插入控件到列表,然后使用Generate()函数一次性构建表格布局(而不是提前确定它的大小或在我添加项目时重新调整大小).

       private void FillInCustomerData()
    {
        GridDisplay grid = new GridDisplay(tl_TopLeft);
        int rowMax = 8;
        int columnLabelIndex = 0;

        int curRow = 0;
        int curCol = 0;

        foreach (var item in DD.AllCustomerData["BasicInfo"]) //Dictionary<string, object>
        {
            if (curRow == rowMax)
            {
                curRow = 0;
                curCol = columnLabelIndex + 2; //1 for key column, 1 for value column
            }

            var keyLabel = new Label();
            keyLabel.Text = item.Key;

            var valueLabel = new Label();
            valueLabel.Text …
Run Code Online (Sandbox Code Playgroud)

c# label tablelayoutpanel winforms

1
推荐指数
1
解决办法
5484
查看次数

TableLayoutPanel运行时的行和列

我试图建立一个包含tablelayoutpanel的用户控件。在此面板中,我需要动态添加3列,每列具有不同的宽度和5行,这些行的所有外壳都具有相同的高度(tablelayoutpanel高度的20%)。

column1的绝对宽度应为20,column2的绝对宽度取决于其内容的宽度(带有.dock = fill的文本框)column3的绝对宽度为30。

我的代码:

Private Sub BuildGUI()
    If Rows > 0 Then

        tlp.Controls.Clear()
        tlp.ColumnStyles.Clear()
        tlp.RowStyles.Clear()


        If Style = Styles.Adding Then
            tlp.ColumnStyles.Add(New ColumnStyle(SizeType.Absolute, 30))
            tlp.ColumnStyles.Add(New ColumnStyle(SizeType.Autosize))
            tlp.ColumnStyles.Add(New ColumnStyle(SizeType.Absolute, 20))
            tlp.ColumnCount = 3

            tlp.RowStyles.Add(New RowStyle(SizeType.AutoSize, 20%))
            tlp.RowStyles.Add(New RowStyle(SizeType.AutoSize, 20%))
            tlp.RowStyles.Add(New RowStyle(SizeType.AutoSize, 20%))
            tlp.RowStyles.Add(New RowStyle(SizeType.AutoSize, 20%))
            tlp.RowStyles.Add(New RowStyle(SizeType.AutoSize, 20%))
            tlp.RowCount = Rows

            For i = 0 To Rows - 1
                Dim L As New Label
                Dim T As New TextBox
                Dim C As New CheckBox

                With L
                    .BackColor = Color.Aqua
                    '.Dock = …
Run Code Online (Sandbox Code Playgroud)

.net vb.net runtime dynamic tablelayoutpanel

1
推荐指数
1
解决办法
1万
查看次数

无法删除TableLayoutPanel中控件之间的间距?

我添加到我的按钮之间有一些间距TableLayoutPanel.我删除了Button中的边框,并在Panel中将Margin和Padding设置为0.但我继续得到那个间距.

tableLayoutPanel.RowCount设置为8,Rows集合我添加了8行Size Type Absolute.

我错过了什么吗?这是代码:

    private void FillSelectLayout()
    {
        tableLayoutPanelSelect.Controls.Clear();
        tableLayoutPanelSelect.RowStyles.Clear();

        tableLayoutPanelSelect.RowCount = 8;

        for (int i = 0; i < 8; i++)
        {
            Button buttonSelector = new Button();
            buttonSelector.Height = 64;
            buttonSelector.Width = 100;
            buttonSelector.FlatStyle = FlatStyle.Flat;
            buttonSelector.FlatAppearance.BorderSize = 0;
            buttonSelector.BackColor = Color.Yellow;
            tableLayoutPanelSelect.Controls.Add(buttonSelector, 0, i);
        }
    }
Run Code Online (Sandbox Code Playgroud)

以下是它的显示方式:

在此输入图像描述

c# .net-4.0 tablelayoutpanel visual-studio-2010 winforms

1
推荐指数
1
解决办法
2641
查看次数