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事件处理程序和KeyDown事件处理程序调用的通用方法。

于 2012-07-17T06:43:13.710 回答