0

ChildWindow を継承するカスタム ダイアログ ウィンドウを作成しました。

public partial class InputWindow : ChildWindow
{
    public InputWindow()
    {
        InitializeComponent();
    }

    private void OKButton_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("clicked");
    }

    private void CancelButton_Click(object sender, RoutedEventArgs e)
    {
        this.DialogResult = false;
    }

    private void inputTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
            this.OKButton_Click(this, new RoutedEventArgs());
    }
}

tetxbox で Enter キーを押すと、イベントOKButton_Clickが発生します (メッセージ ボックスが表示されるため)。ただし、別のクラスに存在する以下のイベント ハンドラーのコード (フォルダーの追加) は発生しません。メッセージボックスが表示されますが!これはなぜですか?どうすれば修正できますか?

InputWindow win = new InputWindow();
win.Title = "Enter New Folder Name";
win.OKButton.Click += (s, e) =>
{
    if (!string.IsNullOrWhiteSpace(win.inputTextBox.Text))
    {
        AddNewFolder(win.inputTextBox.Text);
        win.DialogResult = true;
    }
};
win.Show();
4

1 に答える 1

3

イベントハンドラーOKButton_clickから直接呼び出しているだけです。KeyDownこれは、[OK] ボタン自体でイベントを発生させることと同じではありませんClick。これは単なるメソッド呼び出しです。したがって、 の他のイベント ハンドラーOKButton.Clickが呼び出されないのも不思議ではありません。

Click自分でイベントを手動で発生させる方法はわかりません。Clickイベント ハンドラーとイベント ハンドラーの両方から呼び出される 1 つの共通メソッドが必要なようですKeyDown

于 2012-07-17T06:43:13.710 に答える