私はComboBox
を持っています。別の項目を選択すると、いくつかのデータを削除する必要があります。vb.net SelectedIndexChangedをキャンセルして前の項目を再選択
誤って削除しないように、私はSelectedIndexChanged
イベントで確認メッセージを追加しました。
このようにして、データは確認後に取り消されます。
私の問題は:確認されていない場合、選択したアイテムの変更を避けるにはどうしたらいいですか?
(私は以前、選択されたインデックスをmantainしたい)
私は私がまた私がグローバル変数に実際の値を格納し、それを使用することができることを知っているe.cancel
またはe.handled
を使用することができないことに気づきました以前の値を復元することができますが、私はより良い解決策を探しています(可能な場合)。
EDIT
当時、私は、フォームレベルの変数にインデックスを格納していると私は二回イベントを実行しないようにするブール値を使用しています。以下は、私のコードを見ることができます:
Private Sub ComboBoxEx1_SelectedIndexChanging(sender As Object, e As SelectedIndexChangingEventArgs) Handles ComboBoxEx1.SelectedIndexChanging
Dim SN As DialogResult = MessageBox.Show("Are you sure?", "Changing confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If SN = DialogResult.No Then
e.Cancel = True
Exit Sub
End If
Me.Lbl_Text.Text = Me.ComboBoxEx1.SelectedItem.ToString
End Sub
しかしイベントは、二回発射行によって呼び出されます:
Private Sub CBox_AmType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CBox_AmType.SelectedIndexChanged
If DontRunSelChange Then
DontRunSelChange = False
Exit Sub
End If
'...some code
Dim OkCanc As DialogResult = MessageBox.Show("Are you sure?", "Changing confirmation",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
If OkCanc = vbCancel Then
DontRunSelChange = True 'This to avoid running twice
CBox_AmType.SelectedIndex = AmType_Index
Exit Sub
End If
'...some code
End sub
EDIT 2
次はPlutonixコードを使用して、私の試みです
MyBase.SelectedIndex = MyBase.Items.IndexOf(selectedObject)
'onclientselectedindexchanged =" return confirm( 'Are you sure?'); "' – Santi
フォームレベルの変数では効率が悪いのはなぜですか? (ListBox?ComboBox?)コントロールをサブクラス化し、変更を取り消すことができる新しいイベント(例えば、 'SelectedIndexChanging')を追加することです。それだけで同じロジックを内在化します。 – Plutonix
@Plutonixオクラホマ、それを手に入れました。私はあなたを信じています。もしあなたがそう言えば、私はあなたが言うようにします。 ;)ありがとう – genespos