none
キャンセルボタンを押したときにcomboBoxの値を元に戻したい RRS feed

  • 質問

  • こんばんわ。しやばこと申します。

     

    当方、「comboBoxの値を変えた際にOKキャンセルポップアップを表示させ、
    キャンセルを押した場合に値を元に戻す」という動作を実現させたいと
    考えてます。


    3点わからない点があり、ご質問させて頂きます。

    ①comboBoxのTextChangedイベントを登録し、内部で値を書き換えると
     2回目のイベントが走ります。回避方法にわからない点があります。
     現在は、内部でイベント登録を削除し、再びイベントを登録しているのですが、
     それ以外に方法はありますでしょうか?

    ②DropDownStyleをDropDownにし内部で値を代入した際に、
     Refreshを実行しました。しかし、画面上の値は代入した元の値に戻りませんでした。
     comboBox(DropDown)で値を再描画させたい場合は
     Refresh以外の方法はありますでしょうか?

    ③現在の処理ではcomboBoxのDropDownStyleをDropDownListにし、
     内部でSelectedIndexに値を代入し、値を元に戻してています。
     しかし、実現したい方法はDropDownStyleをDropDownにし、
     入力・DropDownを行いたいと考えています。
     何か良い方法はありますでしょうか?

     

    何か情報をお持ちの方がいらっしゃいましたら、ご教授いただけませんでしょうか。
    宜しくお願い致します。

    2008年10月8日 13:03

回答

  • ①についてはSelectionChangeCommittedイベントを使えばよいと思います。
    ユーザー操作の場合のみに反応してくれるので、内部でSelectedIndexを変更した際に2度目のイベントが発生することはなくなるかと思います。

    ②と③については、現象を確認できませんでした。
    こちらでは、DropDownStyleをDropDownにし、上記イベント内でSelectedIndexを書き換える処理でうまくいっているようです。
    2008年10月8日 14:36

  • TextUpdateイベントを使用すれば「テキストの入力に反応」し、かつ「2回発生しない」ようです。
    SelectionChangeCommittedイベントと合わせて使用すれば「comboBoxの値が変更されたタイミング」を取得できるかと思います。

    ただ、これだとテキストを1文字入力するたびに確認メッセージが表示されることになります。。
    TextChangedイベントでも同じですが

    テキスト入力はどんな使い方をされるのでしょうか?
    入力したい文字列を入力し終わったタイミングが欲しいということであれば、Enterキー押下イベントを拾うとか、Validatingイベントを使うとかの対応が必要かと思います。


    2008年10月9日 10:18

すべての返信

  • ①についてはSelectionChangeCommittedイベントを使えばよいと思います。
    ユーザー操作の場合のみに反応してくれるので、内部でSelectedIndexを変更した際に2度目のイベントが発生することはなくなるかと思います。

    ②と③については、現象を確認できませんでした。
    こちらでは、DropDownStyleをDropDownにし、上記イベント内でSelectedIndexを書き換える処理でうまくいっているようです。
    2008年10月8日 14:36
  • こんにちわ。しやばこです。

     

    ご返信、有難うございます。
    お礼が遅くなり、申し訳ございません。

     

    shchさんのご教授通りに①を試みたところ、内部で値を書き換えた際の
    2度目のイベントが発生しなくなりました。
    ②はSelectionChangeCommittedイベントにしたところ、
    発生はなくなったので、ご質問の動作は実現しました。
    有難うございます。

     

    ③のcomboBoxのDropDownStyleをDropDownにし、入力・DropDownを
    行う場合を、まだ悩んでいます。
    DropDownはSelectionChangeCommittedイベントで使用することにしました。
    しかし、入力を感知するためにはTextChangedイベントを使用しなければと
    考えています。
    TextChangedイベントは内部で値を書き換えた際に2度呼ばれるなど、
    質問①の問題があります。
    comboBoxの入力はさせない方向が良いのでしょうか?
    それともTextChangedイベントを2回発生させない方法があるのでしょうか?

     

    度々のご質問をお許し下さい。
    何か情報をお持ちでしたら、ご教授宜しくお願い致します。

     

    2008年10月9日 7:41

  • TextUpdateイベントを使用すれば「テキストの入力に反応」し、かつ「2回発生しない」ようです。
    SelectionChangeCommittedイベントと合わせて使用すれば「comboBoxの値が変更されたタイミング」を取得できるかと思います。

    ただ、これだとテキストを1文字入力するたびに確認メッセージが表示されることになります。。
    TextChangedイベントでも同じですが

    テキスト入力はどんな使い方をされるのでしょうか?
    入力したい文字列を入力し終わったタイミングが欲しいということであれば、Enterキー押下イベントを拾うとか、Validatingイベントを使うとかの対応が必要かと思います。


    2008年10月9日 10:18
  • こんにちは。中川俊輔 です。

     

    shchさん、回答ありがとうございます。

     

    しやばこさん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?

    有用な情報と思われたため、shchさんの回答へ回答済みチェックをつけさせていただきました。

    追加の質問等ありましたら、是非投稿してください!

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

    2008年10月20日 9:45