Повышение производительности tablelayoutpanel

Я использую tablelayoutpanel в своем проекте WinForm, он медленно реагирует на события. Я сослался на эту ссылку, чтобы ускорить tablelayoutpanel рендеринг .

В моем коде все ячейки в tablelayoutpanel имеют одинаковый размер (100%), я добавил picturebox в каждую ячейку, и это SizeMode на растяжение. Количество ячеек всего 9, и когда я изменяю размер панели, это происходит медленно.
Код показан ниже. . Если я создам 300 ячеек, изменение размера займет 4 секунды.

Void change_tableLayout(int num) //num =9
 {
     CoTableLayoutPanel ctlp = gcnew CoTableLayoutPanel(); //inherited tablelayoutpanel as described in above link
     global_ctlp.Cursor = System.Windows.Forms.Cursors.WaitCursor;     
     num = Math.Sqrt(num);
     global_ctlp.Controls.Clear();
     global_ctlp.RowStyles.Clear();
     global_ctlp.ColumnCount = num;
     global_ctlp.RowCount = num;
         for(int i = 0; i < num; i++) //row cell
             {
                 RowStyle rs = gcnew RowStyle(SizeType::Percent, 50);
                 global_ctlp.RowStyles.Add(rs);
                    for (int j = 0; j < num; j++) //column cell
                       {
                         global_ctlp.ColumnStyles.Add(gcnew ColumnStyle(SizeType.Percent, 50));
                         PictureBox pictureBox1 = gcnew PictureBox();
                         pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
                         pictureBox1.Image = Image.FromFile("image_path");
                         global_ctlp.Controls.Add(pictureBox1, i, j);
                         pictureBox1.Margin = System.Windows.Forms.Padding(0);
                         pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
                     }
             }
     global_ctlp.Cursor = System.Windows.Forms.Cursors.Default;
 }

Можно ли это улучшить дальше. Как мне сделать это быстрее? или Есть ли лучший компонент, кроме tablelayoutpanel.


person Suraksha Ajith    schedule 04.04.2017    source источник
comment
Если вы пытаетесь просто добавить изображения, вы можете использовать Listview   -  person Adarsh Ravi    schedule 04.04.2017
comment
Спасибо за ваше предложение, но я хочу, чтобы изображения отображались побольше (и они должны быть одинакового размера, поэтому я указал размер ячейки как равный). LIstview отображает только имена файлов.   -  person Suraksha Ajith    schedule 04.04.2017
comment
Для добавления изображений также можно использовать неправильный вид списка. Я не уверен в размере, который он позволит вам отобразить, но я почти уверен в том, что listview позволяет вам добавлять изображения, поскольку я реализовал то же самое для одного из приложений, над которыми я работал.   -  person Adarsh Ravi    schedule 04.04.2017
comment
Вам нужно будет добавить ImageList в свою форму, а затем ListView имеет свойство LargeImageList, где вы можете ссылаться на добавленный ImageList. Это позволит вам иметь изображения размером до 256 X 256   -  person Adarsh Ravi    schedule 04.04.2017
comment
Попробуйте использовать DataGridView и событие CellPaint.   -  person LarsTech    schedule 04.04.2017
comment
Возможный дубликат TableLayoutPanel очень медленно реагирует на события   -  person Jim Fell    schedule 08.03.2019