Я пишу программу решения Picross в winforms, где сетка должна быть изменчиваема, чтобы можно было решить разные размеры. Я использовал List<System.Windows.Forms.Label>
, чтобы удерживать метку для каждого квадрата сетки, но когда я изменяю размер сетки до размеров выше 15x15, она имеет тенденцию занимать несколько секунд, чтобы просто изменить размер сетки. Хотя я не ожидаю, что быстрое переключение размеров сетки станет обычным явлением, я надеялся, что сетки не займут 10 секунд, чтобы заполнить ярлыками.Быстрое создание большого количества ярлыков?
System.Windows.Forms.TableLayoutPanel PicrossGrid;
List<System.Windows.Forms.Label> PicrossGridLabel;
private void adjustGridLabel(int newSize)
{
System.Windows.Forms.Label[] temp = new System.Windows.Forms.Label[newSize*newSize];
for (int i = 0; i < newSize; i++)
{
for (int j = 0; j < newSize; j++)
{
temp[i * newSize + j] = new System.Windows.Forms.Label();
temp[i * newSize + j].Anchor = System.Windows.Forms.AnchorStyles.None;
temp[i * newSize + j].AutoSize = true;
temp[i * newSize + j].Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
temp[i * newSize + j].Location = new System.Drawing.Point(i, j);
temp[i * newSize + j].Name = "PicrossGridLabelC" + (i + 1) + "R" + (j + 1);
temp[i * newSize + j].Size = new System.Drawing.Size(24, 30);
temp[i * newSize + j].TabIndex = (i * 5) + j;
temp[i * newSize + j].Text = "X";
temp[i * newSize + j].TextAlign = System.Drawing.ContentAlignment.TopCenter;
PicrossGrid.Controls.Add(temp[i * newSize + j], i, j);
}
}
PicrossGridLabel = temp.ToList();
}
также разместил this.SuspendLayout();
в функции перед тем, что вызывает это, чтобы предотвратить замедление от рисунка, но он по-прежнему невероятно медленно. Есть ли лучший способ подойти к этой проблеме или возможный надзор, который я делаю?
У вас может быть новый класс ярлыков, который наследует ярлык и имеет все ваши общие свойства, предварительно заполненные. – tinstaafl