2013-03-25 81 views
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(); 
     } 
+3

这是调用控件的SuspendLayout()方法很重要的少数情况之一。 – 2013-03-25 20:30:49

+0

不知道汉斯为什么没有发布答案。无论如何,WinForms不是“太慢”。即使是这样,面板上的一些图片框也不算作“图形密集型应用程序”。人们多年来一直在使用WinForms底层技术开发Windows应用程序,并且从那时起计算机就变得更快了。如果它过去是可行的,那现在肯定是可行的。你只需要知道如何使用它。通过调用'tableLayoutPanel1.SuspendLayout()'开始该方法,并通过调用'tableLayoutPanel.ResumeLayout()'结束它。查阅文档以查明原因。 – 2013-03-25 21:23:08

+0

非常感谢Hans Passant它帮助:) – e0n 2013-03-25 21:33:10

回答