none
イベントハンドラの一時的な停止について RRS feed

  • 質問

  • またお世話になります。

    またまた基本的な質問をしますが、あきれないでください(^^;

    ある処理をする関数内で、一時的にSelectedIndexChangedを停止したいのですが、うまくいきません。

    this.ListBox1.SelectedIndexChanged -= new System.EventHandler(this.ListBox1_SelectedIndexChanged);
                   (↑とめたつもり)

    ListBox1.RemoveAt(index);

                  (↑イベントSelectedIndexChangedが発生してしまう)

    this.ListBox1.SelectedIndexChanged += new System.EventHandler(this.List_Itiran_SelectedIndexChanged);

         (↑イベントを再登録(言葉あってます?)してるつもり )

    イベントの停止(?)は「-=」じゃないんですか?

    ほかのログ見ても、そんな感じで書いてるように見受けられたのですが・・・

    皆さんのお知恵を拝借したく、質問いたします(あ~クレクレ君見たいやな・・・)。

    どなたかわかる方、御願いします。_o/L


                       

    2006年11月3日 15:12

回答

  • 間違っていないと思いますけど。
    もっと簡単なコードにしてもできないか試してみてはどうでしょうか?

    ちなみに、下は私が試したコードです。
    Form上にはlistBox1とbutton1が配置されていて、listBox1には適当なTextが入っている状態です。
    // Windows Xp SP2 Pro / Visual Studio 2005 Pro
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("SelectedIndexChanged!!");
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        if (this.listBox1.SelectedIndex != -1)
        {
            this.listBox1.SelectedIndexChanged -= 
    new EventHandler(listBox1_SelectedIndexChanged); this.listBox1.Items.RemoveAt(this.listBox1.SelectedIndex); this.listBox1.SelectedIndexChanged +=
    new EventHandler(listBox1_SelectedIndexChanged); } }
    2006年11月3日 17:14
  • いつもお世話になります。

    すばやい返信ありがとうございます。

    上記の回答をいただきまして、あれこれ試行してみた結果、僕のアホさが判明いたしました。

    イベントを複数用意していて、それが関連して動いていたため、一箇所止めても違うところからそのイベントが発生していました。

    まとめてイベントをストップしたら、期待通りの結果になりました。

    あほうにお付き合いいただきまして、ありがとうございました。(←もうちょっと考えてから質問しろよ(^^;

    2006年11月4日 5:37

すべての返信

  • 間違っていないと思いますけど。
    もっと簡単なコードにしてもできないか試してみてはどうでしょうか?

    ちなみに、下は私が試したコードです。
    Form上にはlistBox1とbutton1が配置されていて、listBox1には適当なTextが入っている状態です。
    // Windows Xp SP2 Pro / Visual Studio 2005 Pro
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("SelectedIndexChanged!!");
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        if (this.listBox1.SelectedIndex != -1)
        {
            this.listBox1.SelectedIndexChanged -= 
    new EventHandler(listBox1_SelectedIndexChanged); this.listBox1.Items.RemoveAt(this.listBox1.SelectedIndex); this.listBox1.SelectedIndexChanged +=
    new EventHandler(listBox1_SelectedIndexChanged); } }
    2006年11月3日 17:14
  • いつもお世話になります。

    すばやい返信ありがとうございます。

    上記の回答をいただきまして、あれこれ試行してみた結果、僕のアホさが判明いたしました。

    イベントを複数用意していて、それが関連して動いていたため、一箇所止めても違うところからそのイベントが発生していました。

    まとめてイベントをストップしたら、期待通りの結果になりました。

    あほうにお付き合いいただきまして、ありがとうございました。(←もうちょっと考えてから質問しろよ(^^;

    2006年11月4日 5:37