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

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

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

Re[3]: 分岐処理で、処理を中断する


(過去ログ 20 を表示中)

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

■8750 / inTopicNo.1)  分岐処理で、処理を中断する
  
□投稿者/ ネスト (1回)-(2007/10/09(Tue) 14:50:32)

分類:[.NET 全般] 

よろしくお願いします。

visualstudio2005,c#を使っております。

case文等で処理が分岐する際、例えばcase1の時this.close()を
行い、case2の時はそのまま続行し、最後にthis.close()を行いたい場合、

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 fm2 = new Form2();
            fm2.ShowDialog();
        }
    }

 public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int i = 0;

            switch (i)
            {

                case 0:
                    this.Close();
                    break;
                case 1:
                    break;
                default:
                    break;
            }

            this.Close();
                    
        }
    }


こんな書き方をしてもcase 0内のcloseイベントを通ってもcloseが発生しませんでした。
上記のソースでなく実務の方ではbool型の変数を用意して、trueなら処理続行、falseなら処理中断、のような方法で解決はしたのですが
どうしてもネストが深くなってしまいます。何か他に良い解決法はあるのでしょうか?


引用返信 編集キー/
■8752 / inTopicNo.2)  Re[1]: 分岐処理で、処理を中断する
□投稿者/ ぼのぼの (99回)-(2007/10/09(Tue) 15:13:59)
No8750 (ネスト さん) に返信
浅学につき理由はちょっとわからないのですが、手元の環境で試した限り、
                 case 0:
                     this.Close();
                     return;
とすると期待の動作をしてくれるみたいです。

引用返信 編集キー/
■8756 / inTopicNo.3)  Re[2]: 分岐処理で、処理を中断する
□投稿者/ なちゃ (67回)-(2007/10/09(Tue) 15:41:53)
Close呼んだからっていきなりメソッドを抜けたりはしませんよ。
多分そこを勘違いしてるんじゃないかと思います。
引用返信 編集キー/
■8824 / inTopicNo.4)  Re[3]: 分岐処理で、処理を中断する
□投稿者/ RUN (4回)-(2007/10/11(Thu) 01:00:55)
なちゃさんも仰られておりますが、this.CloseメソッドはCallした瞬間にはクローズせずに、
closeを呼び出しているイベントが処理を終了したタイミングで、closeイベントを呼び出します。

ですので今回の場合、button1_Clickイベントの全処理が終わった所で、closeイベントが発生する筈ですので、
case 0:
this.Close();
の後に、イベントを終了させるステートメントが無いので、switch文の後の処理が実行されてしまっています。
this.Closeの後すぐにクローズイベントを発生させたい場合、ぼのぼのさんの仰られているように、Returnステートメントを使う必要が有ります。

これは、Breakステートメントが現在のループ文或いはSwich文から抜ける為、後続の処理が実行されるのに対して、
Returnステートメントの場合、そこで現在の関数を抜ける(※Try〜Catch中の場合のFinally句の様な例外もあります)ので、
後続の処理を実行しないと言う違いがでて来ます。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -