2012-03-17 12 views
2

私はWinFormsで遊んでいて、何らかのグリッドを作成するために、たくさんのラベルを境界線で追加したいと思います。ラベルの追加は簡単です。WinFormに多くのラベルを追加する

for (int i = 0; i < 60; i++) 
     { 
      for (int j = 0; j < 60; j++) 
      { 
       var label = new Label(); 
       label.BorderStyle = BorderStyle.FixedSingle; 
       label.SetBounds(i * 10, j * 10, 10, 10); 
       this.Controls.Add(label); 
      } 
     } 

これは本当に遅いです。私はほぼ各四角形が個別に描かれているのを見ることができます。 Controlの配列を作成し、Controls.AddRange()を使用してそれらを追加するとき、同じことが起こります。

私は3600コントロールを描画しているので、いくらか遅いと想像することができますが、これを行うためのより良い方法があるとは思えません。 Control.AddRange()ステートメントを実行すると、ストップウォッチは約1600msかかると伝えます。実際の描画は少し時間がかかるようです。

これを回避し、たくさんのコントロールを使ってアプリケーションをすばやく反応させる方法はありますか?

答えて

4

あなたは、個々のコントロールが必要なのでしょうか? このようなタスクでは、通常、私はusercontrolのonpaintをオーバーライドし、自分自身でテキストとボックスを描画します。 次に、ユーザー入力が必要な場合は、カスタムテキストの1つのテキストボックスontopを配置します。

+0

私は実際に何らかの迷路を作り、A *を使って2点から最短経路を見つけようとしています。しかし、私はLabelクラスから派生し、OnPaintをオーバーライドすることができたと思います。どれどれ :) – fuaaark

2

はあなたForm1.Designer.csからヒントを取る:

this.SuspendLayout(); 

// code to add Labels 

this.ResumeLayout(false); // maybe use true 
+0

ええ、私は顕著な効果はありません。 – fuaaark

関連する問題