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

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

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

ComboBoxを選択前の項目に戻す方法

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

■86915 / inTopicNo.1)  ComboBoxを選択前の項目に戻す方法
  
□投稿者/ MTK (34回)-(2018/04/03(Tue) 21:23:53)

分類:[C#] 

お世話になります。

現在ComboBoxで複数の選択肢を作っており、選択を切替えようとした際にメッセージボックスを出して
キャンセルボタンを押された場合にはComboBoxの選択を前の状態に戻したいです。

何か良い方法はないでしょうか?
引用返信 編集キー/
■86919 / inTopicNo.2)  Re[1]: ComboBoxを選択前の項目に戻す方法
□投稿者/ shu (1108回)-(2018/04/04(Wed) 07:03:23)
No86915 (MTK さん) に返信
> お世話になります。
>
> 現在ComboBoxで複数の選択肢を作っており、選択を切替えようとした際にメッセージボックスを出して
> キャンセルボタンを押された場合にはComboBoxの選択を前の状態に戻したいです。

(1)値の保存用変数の用意(仮にaとします)
(2)aに初期値を設定
(3)SelectedValueChangedやSelectedIndexChangedでメッセージを表示、OKならaの値を更新、キャンセルなら
 aの値でComboBoxを書き換え
(4)キャンセルされたときに再度イベントが発生してしまうのでその保護を行う。
引用返信 編集キー/
■86920 / inTopicNo.3)  Re[2]: ComboBoxを選択前の項目に戻す方法
□投稿者/ ぶなっぷ (174回)-(2018/04/04(Wed) 09:29:01)
一応、こういう議論があることを報告。
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/61af36d1-b1fe-4440-b27e-7c36b25278ed?forum=csharpgeneralja

どうにもならない事情がない限り、コンボボックスの選択変更をキャンセルする動きは
避けるのが賢明です。
コンボボックスの選択変更自体はいったん受け入れるか、
そもそもその選択肢を選ぶこと自体が問題なら、選択肢から削除するか。

引用返信 編集キー/
■86921 / inTopicNo.4)  Re[2]: ComboBoxを選択前の項目に戻す方法
□投稿者/ MTK (35回)-(2018/04/04(Wed) 09:36:32)
No86919 (shu さん) に返信

回答ありがとうございます。

なるほど、やはり変数等で保持しておくしかないですかね。
e.Cancel = true みたいなものがあればと期待しましたが、調べても出てこないですし^^;
手順も記載頂きありがとうございました。

引用返信 編集キー/
■86922 / inTopicNo.5)  Re[3]: ComboBoxを選択前の項目に戻す方法
□投稿者/ MTK (36回)-(2018/04/04(Wed) 09:50:55)
No86920 (ぶなっぷ さん) に返信

回答ありがとうございます。

なるほど、基本的には避けるのが賢明なのですね・・・

今回やりたいのは、コンボボックスで1〜12月を選ぶことができ、選んだタイミングで
その月に対応した金額が表示され、それを自由に変更することができます。
金額が変更されていなければ、違う月を選ばれた時にそのまま月の切替を行いますが
変更されている場合はメッセージボックスで、変更を保存するかの はい/いいえ/キャンセル を選ばせる仕様です。
キャンセルを押された時に戻したいというのは、このためです。


その上でキャンセルで戻す動きを避けるとすると
@その月の金額が変更された時には、「保存」ボタン等で確定させない限りコンボボックスを変更不可にする
A変更される前(コンボボックスが開いたタイミングとか)で判定することで、戻す必要をなくす(矢印キーで変更されるとマズイかな?)
Bコンボボックスの選択変更自体を一度受け入れた上で、その後にプログラムで前の月に戻す
Cメッセージボックスの選択肢を はい/いいえ のみにする (ちょっと無理矢理?)

という感じになりそうですかね?
私の中では、@が一番堅い実装かなと思いますが、他に何か方法はありますでしょうか?
引用返信 編集キー/
■86925 / inTopicNo.6)  Re[4]: ComboBoxを選択前の項目に戻す方法
□投稿者/ ぶなっぷ (175回)-(2018/04/04(Wed) 10:06:13)
たぶん、一番、一般的なGUIはコンボボックスを含む親ウィンドウ自体に変更の
決定/キャンセル権を持たせることです。

もし、コンボボックスが表示されているのがダイアログ上なら、いったんは全ての
月の金額変更を受け入れ(メモリ上に全ての月の金額を待避)、ダイアログのキャン
セルボタンが押されたら、全ての月の金額変更をキャンセルする。

もし、コンボボックスが表示されているのがメインウィンドウなら、
保存ボタンを押さずにメインウィンドウを閉じたら、保存確認を行い、
「いいえ」が押されたら、全ての金額変更をキャンセルする。

なんらかの事情で、全ての月の金額をメモリ上に待避できないのであれば、
> @その月の金額が変更された時には、
> 「保存」ボタン等で確定させない限りコンボボックスを変更不可にする
かなと思います。
引用返信 編集キー/
■86926 / inTopicNo.7)  Re[4]: ComboBoxを選択前の項目に戻す方法
□投稿者/ にゃるら (12回)-(2018/04/04(Wed) 10:07:13)
No86922 (MTK さん) に返信
> 私の中では、@が一番堅い実装かなと思いますが、他に何か方法はありますでしょうか?

メッセージでの確認ではなく、複数の項目を編集したうえで内容をユーザが確認し、
アンドゥ(Ctrl + Z)、リドゥ(Ctrl + Shift + Z)することが出来ると操作しやすいですね!(鬼畜意見)
引用返信 編集キー/
■86931 / inTopicNo.8)  Re[5]: ComboBoxを選択前の項目に戻す方法
□投稿者/ MTK (38回)-(2018/04/04(Wed) 10:55:49)
No86925 (ぶなっぷ さん) に返信

コンボボックスが表示されているのはメインウィンドウ(フォーム上に直接)です。
全ての月の金額をメモリ上に待避させるのは可能かと思います。
月によってデータ数が違うので、少々手間ではありますが^^;

「いいえ」が押されたら、全ての金額変更をキャンセルする というのは結構簡単にできそうですね!
@の方法も含め、検討してみます。

ありがとうございました。
引用返信 編集キー/
■86932 / inTopicNo.9)  Re[5]: ComboBoxを選択前の項目に戻す方法
□投稿者/ MTK (39回)-(2018/04/04(Wed) 10:59:21)
No86926 (にゃるら さん) に返信

回答ありがとうございます。

鬼畜意見と言われますが、ユーザにとってはとても欲しい機能ですね!
私もエクセル等ではアンドゥ、リドゥはよく使いますし、うまく実装できればと思います。
ご意見ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ