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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.8750 の関連記事表示

<< 0 >>
■8750  分岐処理で、処理を中断する
□投稿者/ ネスト -(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なら処理中断、のような方法で解決はしたのですが
    どうしてもネストが深くなってしまいます。何か他に良い解決法はあるのでしょうか?

親記事 /過去ログ20より / 関連記事表示
削除チェック/

■8752  Re[1]: 分岐処理で、処理を中断する
□投稿者/ ぼのぼの -(2007/10/09(Tue) 15:13:59)
    No8750 (ネスト さん) に返信
    浅学につき理由はちょっとわからないのですが、手元の環境で試した限り、
                     case 0:
                         this.Close();
                         return;
    とすると期待の動作をしてくれるみたいです。
記事No.8750 のレス /過去ログ20より / 関連記事表示
削除チェック/

■8756  Re[2]: 分岐処理で、処理を中断する
□投稿者/ なちゃ -(2007/10/09(Tue) 15:41:53)
    Close呼んだからっていきなりメソッドを抜けたりはしませんよ。
    多分そこを勘違いしてるんじゃないかと思います。
記事No.8750 のレス /過去ログ20より / 関連記事表示
削除チェック/

■8824  Re[3]: 分岐処理で、処理を中断する
□投稿者/ RUN -(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句の様な例外もあります)ので、
    後続の処理を実行しないと言う違いがでて来ます。
記事No.8750 のレス /過去ログ20より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -