- - PR -
.NETVBでイベント発生後、イベントをキャンセルする方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-05-24 16:06
コンボボックスのアイテムを変更したときのイベント処理で質問があります。
処理の流れ @コンボコックスのアイテムを変更するとOK、キャンセルメッセージボックスを表示 Aキャンセルボタンを押下したらイベントを無効にする BOKボタンを押下したら処理を実行する 質問 キャンセルボタンを押下したときにSelectedIndexChangedのイベントをキャンセル(無効) にするにはどうしたらよろしいですか?(下のソースの※部分にイベントキャンセル する処理を行う)いろいろ調べたのですが、分かりませんでした。よろしくお願いします。 -------------------ソース------------------- 'コンボボックスのアイテムを変更したときのイベント処理 Private Sub cmbA_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbA.SelectedIndexChanged Dim intRet As Integer intRet = MsgBox("初期化されますが、よろしいですか?",MsgBoxStyle.OKCancel, "確認") 'キャンセル押下 If (intRet = 2) Then '※イベント自体をキャンセルしたい Exit Sub End If setINIT() End Sub [ メッセージ編集済み 編集者: うめ 編集日時 2004-05-24 16:14 ] | ||||
|
投稿日時: 2004-05-24 17:40
1.以前の内容をどこかにためておいて、その内容を復元する
2.ComboBoxを継承して拡張し、SelectedIndexChangingイベントを追加し、 1を応用してイベントをキャンセルされたら復元する こんなところかな? | ||||
|
投稿日時: 2004-05-24 17:54
Jittaさんご返答ありがとうございました。 Jittaさんの言われる1なら簡単にできるのでそれで対応しようと思います。 毎度ありがとうございました。 それにしても、一発の命令でイベントを無効にするのはできそうでできないものなんですね [ メッセージ編集済み 編集者: うめ 編集日時 2004-05-24 17:56 ] | ||||
|
投稿日時: 2004-05-25 08:28
う〜ん?何か勘違いしているような? 例えば、駅の券売機で、ボタンを押した後に取り消すことができますか?お金を入れたことを取り消すことはできますけど。Windowsの場合、ボタンを押しても、マウスのボタンを押したままボタンの外にポインターをずらせば、押さないことにできますけど。しかし、ボタンをクリックして、Clickedイベントが発生すると、「クリック」というすでに発生してしまった事象(過去形のイベント)を取り消すことはできません。 Closingイベントに関しては、現在進行形なので、Closeという動作を「取り消し」て、Closedを発生させなくすることはできます。が、Closedイベントを取り消すことはできません。また、Closingイベントそのものを取り消すこともできません。 2の、SelectedIndexChangingイベントを追加するというのは、そういうことです。「変更されようとしている」という状態を作り、「変更」という“動作”をキャンセルできるタイミングを作ります。ただし、キャンセルするのは“動作”であって、“イベント”ではありません。 | ||||
|
投稿日時: 2004-05-25 11:29
Jittaさん、分かりやすいご説明ありがとうございます。 私自身あまりよくわかっていなかったようです。 すでに変更されたもの(Changed)は過去形なので取り消すことはできない 変更されようとしている(Changing)時はChangeする動作を取り消すことができる がイベントそのものを取り消すことはできない |
1