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

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

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

Re[4]: Show()とShowDialog()


(過去ログ 92 を表示中)

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

■55290 / inTopicNo.1)  Show()とShowDialog()
  
□投稿者/ これからC#! (1回)-(2010/11/25(Thu) 16:54:24)

分類:[.NET 全般] 

お世話になります。

データをサンプリングしてファイルへ保存。
また、サンプリング中に、ファイルからデータを帳票表示する画面を開くこともできる。
というアプリケーションを作成しようと思っています。

帳票表示画面は、ShowDialog()かShow()でオープンするのかどちらが適切なのでしょうか?
感覚だけで根拠はないのですが、ShowDialog()でオープンすると、条件によっては
サンプリング漏れが生じるような気がしています。

よろしくお願いします。

private void button1_Click(object sender, EventArgs e)
{
    //方法1 ShowDialogでオープン
    frmGraph fg = new frmGraph();
    fg.ShowDialog();                //サンプリングしたデータを帳票表示する

    //---------------------------------------------------------------------------
    //方法2 Showでオープン
    //bool isFormOpen = true;         //開いたフォームを閉じるときにfalseにする
    //frmGraph fg = new frmGraph();
    //fg.Show();                      //サンプリングしたデータを帳票表示する

    //while (isFormOpen)
    //{
    //    Application.DoEvents();
    //    Thread.Sleep(2);
    //}
}

private void timer1_Tick(object sender, EventArgs e)
{
    //1秒毎にデータをサンプリングする
}

引用返信 編集キー/
■55293 / inTopicNo.2)  Re[1]: Show()とShowDialog()
□投稿者/ shu (197回)-(2010/11/25(Thu) 17:44:01)
No55290 (これからC#! さん) に返信

button1_ClickでFormが閉じるのを待つならShowDialogの方が安定するかと思います。
Formが閉じるのを待たないでメイン画面の操作を可能にするならShowでないと駄目です。
引用返信 編集キー/
■55300 / inTopicNo.3)  Re[1]: Show()とShowDialog()
□投稿者/ Azulean (652回)-(2010/11/25(Thu) 22:35:53)
No55290 (これからC#! さん) に返信
> 帳票表示画面は、ShowDialog()かShow()でオープンするのかどちらが適切なのでしょうか?
> 感覚だけで根拠はないのですが、ShowDialog()でオープンすると、条件によっては
> サンプリング漏れが生じるような気がしています。

「気がする」のはなぜでしょうか?
何か聞いたことがある、見たことがある、経験したことがあるから不安に思うのでしょうか?

私の感覚では、ShowDialog でサンプリング漏れが出るというのであれば、それは Show でも同じように漏れが出るでしょう。


> //方法2 Showでオープン
> //bool isFormOpen = true; //開いたフォームを閉じるときにfalseにする
> //frmGraph fg = new frmGraph();
> //fg.Show(); //サンプリングしたデータを帳票表示する
>
> //while (isFormOpen)
> //{
> // Application.DoEvents();
> // Thread.Sleep(2);
> //}

通常、このようなコードは書かないでください。
Application.DoEvents を回している間、button1 が押せますし、本来不要な Sleep やループを書かないといけなくなっています。
単にフォームを閉じるまで待つだけであれば ShowDialog が適切です。


ところで、この掲示板は半角カタカナは使用しないでくださいとされています。
上の「利用方法/規約」のリンクを開き、そのページの下の方の箇条書きをご確認ください。
引用返信 編集キー/
■55301 / inTopicNo.4)  Re[2]: Show()とShowDialog()
□投稿者/ これからC#! (2回)-(2010/11/25(Thu) 23:30:34)
No55300 (Azulean さん) に返信
> ■No55290 (これからC#! さん) に返信
>>帳票表示画面は、ShowDialog()かShow()でオープンするのかどちらが適切なのでしょうか?
>>感覚だけで根拠はないのですが、ShowDialog()でオープンすると、条件によっては
>>サンプリング漏れが生じるような気がしています。
>
> 「気がする」のはなぜでしょうか?
> 何か聞いたことがある、見たことがある、経験したことがあるから不安に思うのでしょうか?
>
> 私の感覚では、ShowDialog でサンプリング漏れが出るというのであれば、それは Show でも同じように漏れが出るでしょう。
ShowDialogやMessageBoxなど、OKボタンを押下しないと、処理が次へ進まないようなものは
タイマ(Windows.Forms.Timer)の動きに影響が出てしまうのでは、という勝手な思い込みで書いてしまいました。
すみません。

このような思い込みをしているので、サンプリングを行うタイマも、スレッドタイマで別スレッドに
しておくほうのがよいのかな?などとも思っています。


>> //方法2 Showでオープン
>> //bool isFormOpen = true; //開いたフォームを閉じるときにfalseにする
>> //frmGraph fg = new frmGraph();
>> //fg.Show(); //サンプリングしたデータを帳票表示する
>>
>> //while (isFormOpen)
>> //{
>> // Application.DoEvents();
>> // Thread.Sleep(2);
>> //}
>
> 通常、このようなコードは書かないでください。
> Application.DoEvents を回している間、button1 が押せますし、本来不要な Sleep やループを書かないといけなくなっています。
> 単にフォームを閉じるまで待つだけであれば ShowDialog が適切です。
確かにそのとおりでした。

> ところで、この掲示板は半角カタカナは使用しないでくださいとされています。
> 上の「利用方法/規約」のリンクを開き、そのページの下の方の箇条書きをご確認ください。
ご指摘ありがとうございます。
以後、気をつけます。


引用返信 編集キー/
■55303 / inTopicNo.5)  Re[3]: Show()とShowDialog()
□投稿者/ Azulean (653回)-(2010/11/26(Fri) 00:23:23)
No55301 (これからC#! さん) に返信
> ShowDialogやMessageBoxなど、OKボタンを押下しないと、処理が次へ進まないようなものは
> タイマ(Windows.Forms.Timer)の動きに影響が出てしまうのでは、という勝手な思い込みで書いてしまいました。

ShowDialog や MessageBox.Show を実行してダイアログが閉じるまで、あるいはメッセージボックスのボタンが押されるまでの間も、System.Windows.Forms.Timer によるタイマーイベントが呼び出されます。
今回は都合が良いのかもしれませんが、「呼び出されない」と誤解して不具合を生むことがあります。

たとえば、Timer1_Tick で MessageBox.Show としてメッセージ表示を考えていると、1 秒ごとに新しいメッセージボックスがどんどん出てくるとかいう落とし穴にはまることもあります。


> このような思い込みをしているので、サンプリングを行うタイマも、スレッドタイマで別スレッドに
> しておくほうのがよいのかな?などとも思っています。

サンプリング間隔とかコントロールと絡むかなどで決めていくことです。
System.Windows.Forms.Timer で十分かもしれませんし、System.Threading.Timer などの別スレッドにした方が良いかもしれませんし、Thread としてポーリングするスレッドを作った方が良いかもしれません。
それらは求めていること、それぞれの手法の性質、実装の手間・効率、などから取捨選択することになりますので、これが良いと一律に言えるものではありません。
引用返信 編集キー/
■55312 / inTopicNo.6)  Re[4]: Show()とShowDialog()
□投稿者/ これからC#! (3回)-(2010/11/26(Fri) 13:25:40)
No55303 (Azulean さん) に返信
> ■No55301 (これからC#! さん) に返信

> たとえば、Timer1_Tick で MessageBox.Show としてメッセージ表示を考えていると、1 秒ごとに新しいメッセージボックスがどんどん出てくるとかいう落とし穴にはまることもあります。
>

実際に動作させてみましたが、おっしゃられている動きになりました。
今後、気をつけていきたいと思います。


> それらは求めていること、それぞれの手法の性質、実装の手間・効率、などから取捨選択することになりますので、これが良いと一律に言えるものではありません。

なるほど。一律には決めることができないということから、例えば”サンプリング方法にはこの方法!”などというような
HPや書籍が少ないんですね。
経験がものをいうんでしょうね。

丁寧な回答、ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -