C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: ファーム切替え時のチラツキ(スムーズな画面切替)


(過去ログ 63 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■36163 / inTopicNo.1)  ファーム切替え時のチラツキ(スムーズな画面切替)
  
□投稿者/ もっさ (1回)-(2009/05/22(Fri) 13:24:40)

分類:[C#] 

Visual Stadio C#.NET 2003を使用してまもないですが、質問させてもらいます。OSはWindowsXPです。
フォームアプリケーションを作成していますが、ボタンを押すたびに、次々に
フォームを表示していくものを作成していきたいのですが、
以下のプログラムでは、あたらしい画面が表示されるたびに、後のWindowsの画面が一瞬見えてから、次のフォームが表示されます
どのようにしたら、スムーズに画面が切り替えられるのでしょうか?お願いします。

ApplicationContext mainApplicationContext = new ApplicationContext();
private void button1_Click(object sender, System.EventArgs e)  //フォーム中のボタンが押されたとき
{
 Form2 nF = new Form2();
 nF.Disposed +=new EventHandler(nF_Disposed); //Disposeイベントを登録
 mainApplicationContext.MainForm = nF;             //メインのフォームをForm2に設定
 nF.ShowDialog(); //Form2をモーダルとして表示
}
//Form2のDispseイベントでForm3を表示
private void nF_Disposed(object sender, EventArgs e)
{
  Form3 mF = new Form3();
mF.Disposed +=new EventHandler(mF_Disposed); //Disposeイベントを登録
mainApplicationContext.MainForm = mF;             //メインのフォームをForm3に設定
mF.ShowDialog(); //Form3をモーダルとして表示
}



引用返信 編集キー/
■36166 / inTopicNo.2)  Re[1]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ やじゅ (1012回)-(2009/05/22(Fri) 14:59:37)
やじゅ さんの Web サイト
No36163 (もっさ さん) に返信

//メッセージキューに現在あるWindowsメッセージをすべて処理する
System.Windows.Forms.Application.DoEvents();
をフォーム表示前に入れてみるとか・・・

引用返信 編集キー/
■36169 / inTopicNo.3)  Re[2]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ もっさ (2回)-(2009/05/22(Fri) 15:30:25)
No36166 (やじゅ さん) に返信
> ■No36163 (もっさ さん) に返信
>
> //メッセージキューに現在あるWindowsメッセージをすべて処理する
> System.Windows.Forms.Application.DoEvents();
> をフォーム表示前に入れてみるとか・・・
>
mF.ShowDialog();の前に挿入すればよいのでしょうか?
System.Windows.Forms.Application.DoEvents();
をmF.ShowDialog();の前にいれましたが、変化ありませんでした。


引用返信 編集キー/
■36171 / inTopicNo.4)  Re[3]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ みきぬ (435回)-(2009/05/22(Fri) 15:47:02)
親画面 Form1 があって、その上に子画面 Form2 や Form3 を切り替えて表示したいってことかな。

> あたらしい画面が表示されるたびに、後のWindowsの画面が一瞬見えてから、次のフォームが表示されます
画面を閉じて開いてすると、どうしてもこうなっちゃうんじゃないかしら。

・Form2 や Form3 を、Form ではなくて、Form の中で表示する UserControl として作る。
・Form1 からは子画面を1つだけ開いて、その中で UserControl を切り替えて表示する
といいんじゃないかな(いわゆる紙芝居)
引用返信 編集キー/
■36175 / inTopicNo.5)  Re[4]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ もっさ (3回)-(2009/05/22(Fri) 18:04:33)
No36171 (みきぬ さん) に返信
> 親画面 Form1 があって、その上に子画面 Form2 や Form3 を切り替えて表示したいってことかな。
>
>>あたらしい画面が表示されるたびに、後のWindowsの画面が一瞬見えてから、次のフォームが表示されます
> 画面を閉じて開いてすると、どうしてもこうなっちゃうんじゃないかしら。
>
> ・Form2 や Form3 を、Form ではなくて、Form の中で表示する UserControl として作る。
> ・Form1 からは子画面を1つだけ開いて、その中で UserControl を切り替えて表示する
> といいんじゃないかな(いわゆる紙芝居)

みきぬさまのいうとおり、親画面 Form1 があって、その上に子画面 Form2 や Form3 を切り替えて表示したいってことです。
Form1からForm2が表示されるときは、スムーズに表示されるのですが、Form2からForm3を表示するときに、後にあるForm1まで
が一瞬消えてから、Form3が表示される状態です。
普通に、Formを作成して、スムーズに表示させることは、できないのでしょうか?教えてください

引用返信 編集キー/
■36181 / inTopicNo.6)  Re[5]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ biac (100回)-(2009/05/23(Sat) 10:17:15)
biac さんの Web サイト
> Form1からForm2が表示されるときは、スムーズに表示されるのですが、Form2からForm3を表示するときに、後にあるForm1まで
> が一瞬消えてから、Form3が表示される状態です。

Form2 を閉じるときに Form1 へ制御が返っていないので、 Form1 が自分を描画できないのでは?

普通は…
private void button1_Click(object sender, System.EventArgs e)
{
 Form2 nF = new Form2();
 nF.ShowDialog(); //Form2をモーダルとして表示

 DoEvents();

 Form3 mF = new Form3();
 mF.ShowDialog(); //Form3をモーダルとして表示
}
…みたいに書きますよね?

引用返信 編集キー/
■36191 / inTopicNo.7)  Re[6]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ もっさ (4回)-(2009/05/23(Sat) 22:58:11)
No36181 (biac さん) に返信
>>Form1からForm2が表示されるときは、スムーズに表示されるのですが、Form2からForm3を表示するときに、後にあるForm1まで
>>が一瞬消えてから、Form3が表示される状態です。
>
> Form2 を閉じるときに Form1 へ制御が返っていないので、 Form1 が自分を描画できないのでは?
>
> 普通は…
> private void button1_Click(object sender, System.EventArgs e)
> {
>  Form2 nF = new Form2();
>  nF.ShowDialog(); //Form2をモーダルとして表示
>
>  DoEvents();
>
>  Form3 mF = new Form3();
>  mF.ShowDialog(); //Form3をモーダルとして表示
> }
> …みたいに書きますよね?
>

アドバイスありがとうございます。
以下のように、Form3 mF = new Form3(); の前にDoEvents()を入れましたが、変化はありませんでした

private void button1_Click(object sender, System.EventArgs e)  //フォーム中のボタンが押されたとき
{
 Form2 nF = new Form2();
 nF.Disposed +=new EventHandler(nF_Disposed); //Disposeイベントを登録
 nF.ShowDialog(); //Form2をモーダルとして表示
}
//Form2のDispseイベントでForm3を表示
private void nF_Disposed(object sender, EventArgs e)
{
  System.Windows.Forms.Application.DoEvents();
  Form3 mF = new Form3();
  mF.Disposed +=new EventHandler(mF_Disposed); //Disposeイベントを登録
  mF.ShowDialog(); //Form3をモーダルとして表示
}

引用返信 編集キー/
■36216 / inTopicNo.8)  Re[7]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ biac (101回)-(2009/05/25(Mon) 12:34:46)
biac さんの Web サイト
> 以下のように、Form3 mF = new Form3(); の前にDoEvents()を入れましたが、変化はありませんでした
>
> private void button1_Click(object sender, System.EventArgs e)  //フォーム中のボタンが押されたとき
> {
>  Form2 nF = new Form2();
>  nF.Disposed +=new EventHandler(nF_Disposed); //Disposeイベントを登録

どうして Dispose イベントで次のフォームを出さねばならないんですか?
引用返信 編集キー/
■36218 / inTopicNo.9)  Re[8]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ HiJun (131回)-(2009/05/25(Mon) 14:26:20)
private void button1_Click(object sender, System.EventArgs e)  //フォーム中のボタンが押されたとき
{
 Form2 nF = new Form2();
 nF.Disposed +=new EventHandler(nF_Disposed); //Disposeイベントを登録
 nF.ShowDialog(); //Form2をモーダルとして表示

 System.Windows.Forms.Application.DoEvents();
 Form3 mF = new Form3();
 mF.Disposed +=new EventHandler(mF_Disposed); //Disposeイベントを登録
 mF.ShowDialog(); //Form3をモーダルとして表示
}

では、不味いのでしょうか?
引用返信 編集キー/
■36219 / inTopicNo.10)  Re[9]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ みきぬ (437回)-(2009/05/25(Mon) 14:50:10)
なんとなく書いてみた。

Form currentForm;   // 開いているフォーム
Form nextForm;      // 次に開くフォーム

private void mainloop()
{
    while (nextForm != null)
    {
        currentForm = nextForm;
        nextForm = null;

        currentForm.ShowDialog();
    }
}

private void button1_Click(object sender, EventArgs e)
{
    nextForm = new Form2();
    nextForm.FormClosing += new FormClosingEventHandler(Form2_FormClosing);
    mainloop();
}

void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    nextForm = new Form3();
    nextForm.FormClosing += new FormClosingEventHandler(Form3_FormClosing);
}

void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
    nextForm = new Form2();
    nextForm.FormClosing += new FormClosingEventHandler(Form2_FormClosing);
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -