|
■No51097 (よねKEN さん) に返信 > 以下のコードの処理順ですが、 > >>AllRemove(); //---------------------------------------------ここで全コントロール一気にはずす >>CG("背景\\Green.png", "キャラ\\タイトル.png", 380, 0); >>GVM.OnseiClass.Koe1("声\\Opening.wav"); >>TitleAD(); //------------------------------------------------タイトルのコントロールを付ける > > > CG("背景\\Green.png", "キャラ\\タイトル.png", 380, 0); > GVM.OnseiClass.Koe1("声\\Opening.wav"); > AllRemove(); //---------------------------------------------ここで全コントロール一気にはずす > TitleAD(); //------------------------------------------------タイトルのコントロールを付ける > > もしくは、 > > AllRemove(); //---------------------------------------------ここで全コントロール一気にはずす > TitleAD(); //------------------------------------------------タイトルのコントロールを付ける > CG("背景\\Green.png", "キャラ\\タイトル.png", 380, 0); > GVM.OnseiClass.Koe1("声\\Opening.wav"); > > ではダメなんでしょうか? > コントロールを削除してから追加する間の処理が長いのが原因じゃないの?と想像しているので。 この並べ替えは最初にやっていましてやはりだめでした。 でCGの表示が原因ということであちこち調べていましたら、 private void Form1_Paint(object sender, PaintEventArgs e) がコントロールをつけたりはずしたりする度に再描画をする動きをするというMSDNの内容を発見(アドレスメモし忘れた) で考えると今回の現象と一致するんですね。これ。TitleAD()で複数個一気に処理するとコントロール1個表示するごとにForm1_PaintがCG書き直す。ダブルバッファリング使っているのでCGはちらつきませんがCG書き換えしている時間次のコントロールの表示処理が止まるので順順にかわっていくように見える。 試しに1フォーム1レイアウトの画面を作ってみましたがコントロールつけはずしなしで最初の画面表示がやはりコントロールが順順に変わっていきましたのでマルチフォームでも現象は出てしまうことが判明。 Form1_Paintは他のウィンドウが重なった後CGが消えてしまうのを防ぐために使っているのですがさてどうしたらいいのか... Form1_Paintの動きを一時的に止めることが何かでできるのか? Form1_Paintを使わずに他のウィンドウが重なった後CGが消えてしまうのを防ぐことができるのか? どちらかができれば解決なんですが、いまだにいい方法にたどり着けません。 この2点の情報をご存知の方、いらっしゃいましたらアドバイスをいただきたいので解決をはずしておきます。 よろしくお願いいたします。
|