2010-12-04 15 views
1

スプラッシュ画面の後に3秒間表示されるスプラッシュ画面を持つ簡単なプログラムを作成しています。メインフォームが読み込まれます。しかし、私のメインフォームが読み込まれると、すべてのコントロールをロードするプロセスになります(私のページに36個のボタンがあります...それらをルーレットテーブル用に使用しています)。だから私のメインフォームの最初の1〜2秒間表示されて、それはこれらのすべてのボタンをロードしていると醜いのように見えます。私のスプラッシュ画面や他の方法の3秒間にこのフォームを読み込むにはどうすればいいですか?おかげコントロールがロードされた後にメインフォームを表示する方法


for (i = 0; i < 36; i++) 
{ int j, k; j = i % 3; k = i/3; 
    button[i] = new Label(); 
    button[i].Location = new Point(80 + (41*j), 64 + (20*k)); 
    button[i].Cursor = Cursors.Hand; 
    etc etc. 
} 
+0

WinFormsまたはWeb? – adopilot

+0

私は基本的なWinFormを使用しています – Nick

+0

私は何かを持っています – Nick

答えて

3

それはあなただけのボタンをペイントするのに必要な時間を見ている、それらをロードしていません。これを簡単に再確認することができます:フォームを最小化して復元します。これは2秒を要するもので、ハイエンドのものです。多分、それはちょうどそのように感じるかもしれません。あるいは、あなたは非常に弱いハードウェアを持っているかもしれません。 36個のボタンがあると、特に画像を持っているときに絵を見ることができるようになります。あなたがボタンに置​​いたイメージが正しいサイズになっていることを確認して、ボタンに合わせてサイズを変更しなければならないことは高価であり、ペイント時に食べる。

Aeroを有効にしてVistaまたはWin7でこれを実行しない限り、スプラッシュ画面はこの問題を解決しません。不透明度プロパティを使用して、タイマーで0から0.99に増加させていくことができます。真の解決策は、ボタンを使用せずに、フォームのOnPaint()メソッドオーバーライドでルーレットテーブルを描画することです。ただし、マウスヒットテストを行うコードを追加する必要があります。

A Q& D修正は、フォーム全体をダブルバッファしてオフスクリーンビットマップにレンダリングし、その結果を画面に表示させることです。それは絵をスピードアップしません、それはもはや顕著ではありません。このコードをフォームクラスに貼り付け、Windows XP以降の組み込みサポートを使用します。

protected override CreateParams CreateParams { 
    get { 
    CreateParams cp = base.CreateParams; 
    cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED 
    return cp; 
    } 
} 
+0

よくダブルバッファーは間違いなく多くの助けになりました。それは私が対処できるものです。基本的に今のように見えるのは、36個のボタンをすばやく繰り返してすべてを透明にすることです。 – Nick

関連する問題