|
分類:[.NET 全般]
[VS2010 WPF] こんにちは。
WPFを最近はじめたのですが、TabControlでつまっています。 タブを切り替えたときに、チェックをし、NGのときは切り替え前のタブに戻るように 実装したいのですが、うまく動きません。
具体的には、タブを切り替えたときに、 問い合わせのメッセージを表示し、
キャンセルする(Yesボタン)→切り替え前のタブに移動 キャンセルしない(Noボタン)→タブインデックスを覚えておく
という実装です。 1回目のキャンセルはうまくいくのですが、2回目は、切り替えイベントが発生しません。 2パターンで試してみたのですが、どちらもうまくいきませんでした。 (Windows.Formsなら、Deselectingイベントでできそうなのですが・・・)
すみませんがご教授願えないでしょうか。
よろしくお願いいたします。
■■パターン@■■ bool initialize = false; int lastIdx = 0; private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if ( true == initialize && MessageBoxResult.Yes == MessageBox.Show("タブ切り替えキャンセル", "問い合わせ", MessageBoxButton.YesNo )) { tabControl.SelectionChanged -= tabControl_SelectionChanged; tabControl.SelectedIndex = lastIdx; tabControl.SelectionChanged += tabControl_SelectionChanged; } lastIdx = tabControl3.SelectedIndex; }
private void Window_SourceInitialized(object sender, EventArgs e) { initialize = true; }
■■パターンA■■ bool initialize = false; int lastIdx = 0; bool chkFlag = false; private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if ( true == chkFlag ) { return; }
chkFlag = true;
if ( true == initialize && MessageBoxResult.Yes == MessageBox.Show("キャンセル", "問い合わせ", MessageBoxButton.YesNo )) { // tabControl.SelectionChanged -= tabControl_SelectionChanged; tabControl.SelectedIndex = lastIdx; // tabControl.SelectionChanged += tabControl_SelectionChanged; } lastIdx = tabControl.SelectedIndex;
chkFlag = false; }
private void Window_SourceInitialized(object sender, EventArgs e) { initialize = true; }
|