【问题标题】:Adding PictureBoxes to TableLayoutPanel is very slow将 PictureBoxes 添加到 TableLayoutPanel 非常慢
【发布时间】:2013-03-25 19:49:23
【问题描述】:

大家好,我正在将PictureBoxes 添加到TableLayoutPanel 单元格,但是对于 10x10 网格,它需要大约 10 秒,这太长了。我的代码看起来像这样,你能告诉我如何改进它,所以PictureBoxes 会立即添加吗?这是我的做法:

 private void x10ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tableLayoutPanel1.Controls.Clear();
            tableLayoutPanel1.ColumnStyles.Clear();
            tableLayoutPanel1.RowStyles.Clear();
            tableLayoutPanel1.ColumnCount = 10;
            tableLayoutPanel1.RowCount = 10;
            int sliderval = trackBar1.Value;
            //tableLayoutPanel1.Controls.Add(new PictureBox(),2,1);
            for (int i = 0; i < tableLayoutPanel1.RowCount; i++)
            {
                tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, (100 / tableLayoutPanel1.RowCount)));
                for (int j = 0; j < tableLayoutPanel1.ColumnCount; j++)
                {
                    tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, (100 / tableLayoutPanel1.ColumnCount)));


                    PictureBox picture = new PictureBox
                    {
                        Name = "pictureBox" + i,
                        Size = new Size(49, 35),
                        Visible = true,

                        Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right))),
                        BackColor = colors[random.Next(0, sliderval)],
                        TabIndex = 0,
                        TabStop = false
                    };
                    tableLayoutPanel1.Controls.Add(picture, j, i);
                    picture.Dock = DockStyle.Fill;
                    // picture.Margin = new Thickness(40, 16, 0, 0);
                    // picture.Padding = new Padding(0);         
                    picture.SizeMode = PictureBoxSizeMode.Normal;
                    picture.Margin = new Padding(0);
                }

            }
            AssignClickEvent();
        }

【问题讨论】:

  • 这是调用控件的 SuspendLayout() 方法很重要的少数情况之一。
  • 不知道汉斯为什么没有发布这个答案。无论这意味着什么,WinForms 都不是“太慢”。即使是这样,面板上的几个图片框也不能算作“图形密集型应用程序”。多年来,人们一直在使用作为 WinForms 基础的技术来制作 Windows 应用程序,从那时起,计算机的速度就变得更快了。如果它曾经是可行的,那么它现在肯定是可行的。你只需要知道如何使用它。通过调用tableLayoutPanel1.SuspendLayout() 开始该方法并通过调用tableLayoutPanel.ResumeLayout() 结束它。查看文档以了解原因。
  • 非常感谢 Hans Passant 它帮助了 :)
  • @CodyGray 在这里没有看到你的 hackforms 评论......我还在等着用this one 上的赏金奖励你
  • @HighCore 对不起,我不玩那个游戏。它被操纵了。一旦我浪费大量时间发布解决方案,目标就会改变。此外,我认为您对答案并不真正感兴趣,这也是我在这里回答问题的唯一原因——帮助人们。我不在乎声誉。 two bounties I've earned,是我不小心赚到的。如果您真的在寻找一个好的答案,我是否建议每个问题只问一个问题?你有 8 在那里。

标签: c# winforms tablelayoutpanel


【解决方案1】:

看看这个网址。可能是您的表格需要重新粉刷 alm 并将其拖慢。而是暂停绘画。进行所有更改,然后恢复。少画画。 http://www.c-sharpcorner.com/Forums/Thread/52/

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2021-03-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多