0
你好家伙我将PictureBoxes
添加到TableLayoutPanel
单元格,但对于10x10的网格,它需要10秒钟,这太长了。我的代码看起来像这样,你能告诉我如何改进它,所以PictureBoxes
会立即添加?下面是我该怎么做:将TableBoxes添加到TableLayoutPanel非常慢
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()方法很重要的少数情况之一。 – 2013-03-25 20:30:49
不知道汉斯为什么没有发布答案。无论如何,WinForms不是“太慢”。即使是这样,面板上的一些图片框也不算作“图形密集型应用程序”。人们多年来一直在使用WinForms底层技术开发Windows应用程序,并且从那时起计算机就变得更快了。如果它过去是可行的,那现在肯定是可行的。你只需要知道如何使用它。通过调用'tableLayoutPanel1.SuspendLayout()'开始该方法,并通过调用'tableLayoutPanel.ResumeLayout()'结束它。查阅文档以查明原因。 – 2013-03-25 21:23:08
非常感谢Hans Passant它帮助:) – e0n 2013-03-25 21:33:10