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. ボタンよりも軽量なコントロールを使用します。これは、タスクにより適しています。たとえば、Listbox通常Comboboxのボタンとしてスタイル設定された、、、またはいくつかのチェックボックスまたはオプションボタン。

  4. Button自分の望むことを正確に実行するが、それ以上は実行しない独自の軽量コントロールを作成します。

于 2013-03-23T21:39:04.847 に答える