none
コンボボックスの選択キャンセル RRS feed

  • 質問

  • お世話になっております。

    コンボボックスの選択キャンセルは不可能でしょうか。SelectedIndexChanging→e.Cancel みないなことは出来ないでしょうか。

    宜しくお願い致します。

    環境WinXP C# VS2005

     

    2006年11月7日 11:19

回答

  • 通常、コンボボックスを操作しただけでは、コンボボックスで選択されている項目が変わるだけです。コンボボックスの項目を変えた時に何かの処理をしているのであれば、その処理の時にどうにでもなるでしょう。
    ちょっと質問の意味がはっきりわかりませんので、どういうことがやりたいのかもう少し説明を下さい。 その結果、違う解決方法が見つかるかもしれません。

    2006年11月7日 12:36
    モデレータ
  • Myon さん、こんにちは。

     Myon さんからの引用
    コンボボックスの選択キャンセルは不可能でしょうか。SelectedIndexChanging→e.Cancel みないなことは出来ないでしょうか。

    やめた方が良いでしょう。
    Windows GUI の標準から大きく外れています。

    変更させたくないのであれば、ComboBox 自体を無効にしておきましょう。

    変更させる時に警告を促したいのであれば、ComboBox の Item を変更後、
    何らかの Button を押下することで、confirm を表示して、その結果によって反映させるようにしましょう。

    2006年11月8日 0:41
  •  Myon さんからの引用

    コンボボックスの選択を変えようとしたときにメッセージボックスを出し、「本当に変えてもいいんですか?」と尋ね、「いいえ」が押されたら最初に選択されていた項目に戻したいのです。前のやつを覚えておいてもう一度選択しなおすしかないでしょうか。

    このようにしなければならない状況はかなり特殊だと思います。コンボボックスなので、ユーザーが意図して変えているわけですから、そこでわざわざ確認を出すと、煩わしいと感じられてしまう恐れがあります。通常は、じゃんぬさんの言われるように、登録や更新など、何らかの処理をするためのボタンを押した時に注意を促すのが普通だと思います。つまり、ユーザーが入力する値は全て一旦受け入れ、その値を使用して何らかの処理(登録や更新など)をする際に、まとめてチェックするようにします。
    マウスのホイールで意図せずに変わってしまった場合でも、同様に対処できます。

    もし、それでも何か事情があって実現されたいのであれば、Myonさんが言われるように、前の項目を覚えておくしかないと思います。SelectedIndexChangedなどのイベントは、選んだ項目が前と同じであろうが違っていようが関係なく発生しますので、注意して下さい。

    2006年11月8日 1:42
    モデレータ

すべての返信

  • 通常、コンボボックスを操作しただけでは、コンボボックスで選択されている項目が変わるだけです。コンボボックスの項目を変えた時に何かの処理をしているのであれば、その処理の時にどうにでもなるでしょう。
    ちょっと質問の意味がはっきりわかりませんので、どういうことがやりたいのかもう少し説明を下さい。 その結果、違う解決方法が見つかるかもしれません。

    2006年11月7日 12:36
    モデレータ
  • ご回答ありがとうございます。

    コンボボックスの選択を変えようとしたときにメッセージボックスを出し、「本当に変えてもいいんですか?」と尋ね、「いいえ」が押されたら最初に選択されていた項目に戻したいのです。前のやつを覚えておいてもう一度選択しなおすしかないでしょうか。

    2006年11月8日 0:34
  • Myon さん、こんにちは。

     Myon さんからの引用
    コンボボックスの選択キャンセルは不可能でしょうか。SelectedIndexChanging→e.Cancel みないなことは出来ないでしょうか。

    やめた方が良いでしょう。
    Windows GUI の標準から大きく外れています。

    変更させたくないのであれば、ComboBox 自体を無効にしておきましょう。

    変更させる時に警告を促したいのであれば、ComboBox の Item を変更後、
    何らかの Button を押下することで、confirm を表示して、その結果によって反映させるようにしましょう。

    2006年11月8日 0:41
  •  Myon さんからの引用

    コンボボックスの選択を変えようとしたときにメッセージボックスを出し、「本当に変えてもいいんですか?」と尋ね、「いいえ」が押されたら最初に選択されていた項目に戻したいのです。前のやつを覚えておいてもう一度選択しなおすしかないでしょうか。

    このようにしなければならない状況はかなり特殊だと思います。コンボボックスなので、ユーザーが意図して変えているわけですから、そこでわざわざ確認を出すと、煩わしいと感じられてしまう恐れがあります。通常は、じゃんぬさんの言われるように、登録や更新など、何らかの処理をするためのボタンを押した時に注意を促すのが普通だと思います。つまり、ユーザーが入力する値は全て一旦受け入れ、その値を使用して何らかの処理(登録や更新など)をする際に、まとめてチェックするようにします。
    マウスのホイールで意図せずに変わってしまった場合でも、同様に対処できます。

    もし、それでも何か事情があって実現されたいのであれば、Myonさんが言われるように、前の項目を覚えておくしかないと思います。SelectedIndexChangedなどのイベントは、選んだ項目が前と同じであろうが違っていようが関係なく発生しますので、注意して下さい。

    2006年11月8日 1:42
    モデレータ
  • じゃんぬねっと様、trapemiya様ありがとうございました。

    なんとか確認を出さずに済む方向へ見直していきたいと思います。

    いつも適切なご指導感謝いたしております。

    2006年11月8日 2:00
  • 手元にあるソースを見ていたらメッセージを表示してました。orz

    メッセージでキャンセルをしたときにフラグでメッセージの再表示を防いでいます。
    動きとしては、やっぱりメッセージが邪魔に感じてしまいます。
    どうしてこんな仕様になってしまったんだ・・・


    Private canceling As Boolean = False
    Private selectedIndex As Integer = -1
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        ' キャンセル
        If Me.canceling = True Then
            Return
        End If
     
        ' 変化がない場合は何もしない
        If Me.ComboBox1.SelectedIndex = Me.selectedIndex Then
            Return
        End If
     
        If MessageBox.Show("本当に変えてもいいんですか?", "メッセージ", MessageBoxButtons.OKCancel) = Windows.Forms.DialogResult.Cancel Then
            Me.canceling = True
            Me.ComboBox1.SelectedIndex = Me.selectedIndex
        End If
     
        Me.selectedIndex = Me.ComboBox1.SelectedIndex
        Me.canceling = False
    End Sub
     
     
     
     
    2006年11月8日 14:31