0

我使用这个解决方案(在下面的代码中)在面板上添加乘法按钮。它工作正常,但是当它尝试添加很多按钮时(例如 40 个)需要很长时间。我想问一下,是否有人知道针对这种情况的更好解决方案?我正在考虑在程序启动时创建所有可能的按钮,但在这种情况下,启动时间会太长,特别是如果按钮真的很多(这种情况是可能的)?

while (data.Read())
{
  btnName = Convert.ToString(data["Name"]);
  btnColor = (color == string.Empty) ? Convert.ToString(data["Color"]) : color;
  categoryId = Convert.ToInt16(data["CategoryId"]); 
  //both category and article table's contains this data!

  if (categoryId == articleCatId || cl == typeof(Category))
  {
      Button newbtn = new Button();
      newbtn.TextAlign = ContentAlignment.MiddleCenter;
      newbtn.Click += (sender, e) => method(sender, e);
      newbtn.Text = btnName;
      newbtn.Name = "button-" + btnName;
      newbtn.Height = size;
      newbtn.Width = size;
      newbtn.Font = new Font("Microsoft Sans Serif", fontH);
      newbtn.Location = new Point(paddingL, paddingT);
      newbtn.BackColor = ColorTranslator.FromHtml(btnColor);
      location.Controls.Add(newbtn);
      num += 1;

      if ((num - 1) / inline == 1) { paddingT += size; paddingL = 2; num = 1; }
      else { paddingL = paddingL + size; }
   }
}
4

1 回答 1

1

您可能无法减少需要创建的按钮数量,因此您可以选择一些选项来加快速度:

  1. 将按钮添加到不可见的对象。仅当您完成添加按钮后,才能使对象可见。

  2. 调用SuspendLayout父控件以阻止它尝试自行布局。然后ResumeLayout在您完成添加按钮时调用。

  3. 使用比按钮更轻量级的控件,这更适合任务。例如,一个ListboxCombobox或几个复选框或选项按钮,样式为普通按钮。

  4. 编写您自己的轻量级Button控件,该控件完全符合您的要求,但仅此而已。

于 2013-03-23T21:39:04.847 回答