- PR -

.NETVBでイベント発生後、イベントをキャンセルする方法

1
投稿者投稿内容
うめ
会議室デビュー日: 2003/07/01
投稿数: 13
お住まい・勤務地: 関西地区
投稿日時: 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 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-24 17:40
1.以前の内容をどこかにためておいて、その内容を復元する

2.ComboBoxを継承して拡張し、SelectedIndexChangingイベントを追加し、
  1を応用してイベントをキャンセルされたら復元する


こんなところかな?
うめ
会議室デビュー日: 2003/07/01
投稿数: 13
お住まい・勤務地: 関西地区
投稿日時: 2004-05-24 17:54
引用:

Jittaさんの書き込み (2004-05-24 17:40) より:
1.以前の内容をどこかにためておいて、その内容を復元する

2.ComboBoxを継承して拡張し、SelectedIndexChangingイベントを追加し、
  1を応用してイベントをキャンセルされたら復元する


こんなところかな?



Jittaさんご返答ありがとうございました。
Jittaさんの言われる1なら簡単にできるのでそれで対応しようと思います。
毎度ありがとうございました。
それにしても、一発の命令でイベントを無効にするのはできそうでできないものなんですね


[ メッセージ編集済み 編集者: うめ 編集日時 2004-05-24 17:56 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-25 08:28
引用:

うめさんの書き込み (2004-05-24 17:54) より:

それにしても、一発の命令でイベントを無効にするのはできそうでできないものなんですね


う〜ん?何か勘違いしているような?

 例えば、駅の券売機で、ボタンを押した後に取り消すことができますか?お金を入れたことを取り消すことはできますけど。Windowsの場合、ボタンを押しても、マウスのボタンを押したままボタンの外にポインターをずらせば、押さないことにできますけど。しかし、ボタンをクリックして、Clickedイベントが発生すると、「クリック」というすでに発生してしまった事象(過去形のイベント)を取り消すことはできません。
 Closingイベントに関しては、現在進行形なので、Closeという動作を「取り消し」て、Closedを発生させなくすることはできます。が、Closedイベントを取り消すことはできません。また、Closingイベントそのものを取り消すこともできません。
 2の、SelectedIndexChangingイベントを追加するというのは、そういうことです。「変更されようとしている」という状態を作り、「変更」という“動作”をキャンセルできるタイミングを作ります。ただし、キャンセルするのは“動作”であって、“イベント”ではありません。
うめ
会議室デビュー日: 2003/07/01
投稿数: 13
お住まい・勤務地: 関西地区
投稿日時: 2004-05-25 11:29
引用:

Jittaさんの書き込み (2004-05-25 08:28) より:
う〜ん?何か勘違いしているような?

 例えば、駅の券売機で、ボタンを押した後に取り消すことができますか?お金を入れたことを取り消すことはできますけど。Windowsの場合、ボタンを押しても、マウスのボタンを押したままボタンの外にポインターをずらせば、押さないことにできますけど。しかし、ボタンをクリックして、Clickedイベントが発生すると、「クリック」というすでに発生してしまった事象(過去形のイベント)を取り消すことはできません。
 Closingイベントに関しては、現在進行形なので、Closeという動作を「取り消し」て、Closedを発生させなくすることはできます。が、Closedイベントを取り消すことはできません。また、Closingイベントそのものを取り消すこともできません。
 2の、SelectedIndexChangingイベントを追加するというのは、そういうことです。「変更されようとしている」という状態を作り、「変更」という“動作”をキャンセルできるタイミングを作ります。ただし、キャンセルするのは“動作”であって、“イベント”ではありません。


Jittaさん、分かりやすいご説明ありがとうございます。
私自身あまりよくわかっていなかったようです。

すでに変更されたもの(Changed)は過去形なので取り消すことはできない
変更されようとしている(Changing)時はChangeする動作を取り消すことができる
がイベントそのものを取り消すことはできない
1

スキルアップ/キャリアアップ(JOB@IT)