按钮点击前后的C#调用方法

时间:2018-03-06 09:25:05

标签: c# wpf button

我的主窗口有几个按钮。我希望打开其他窗口的那些在执行之前禁用主窗口并在之后启用。除了写这个之外,还有不同的方法来实现这个目标:

private void button_Click(object sender, RoutedEventArgs e)
        {
            this.IsEnabled = false;
            Some code...();
            this.IsEnabled = true;
        }

在每种方法中?

3 个答案:

答案 0 :(得分:0)

您可以通过以下方式创建一个运行代码的方法:

private void DisableAndExecute(Action action)
{
    this.IsEnabled = false;
    action();
    this.IsEnabled = true;
}

private void button_Click(object sender, RoutedEventArgs e)
{
    DisableAndExecute(() =>
    {
        Some code...();
    });
}

这只意味着您的禁用和重新启用都在一个地方完成。

您也可以在打开表单时尝试使用ShowModal而不是Show:

form2.ShowModal();

答案 1 :(得分:0)

如果您不介意手动添加事件处理程序,则可以执行以下操作:

public MainWindow()
{
    InitializeComponent();
    btn.Click += Wrap(Button_Click);
}

public RoutedEventHandler Wrap(RoutedEventHandler handler)
{
    return (sender, e) =>
    {
        try
        {
            this.IsEnabled = true;
            handler(sender, e);
        }
        finally
        {
            this.IsEnabled = false;
        }
    };
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    // Code
}

答案 2 :(得分:0)

您可以向窗口添加父子关系,这样您就不必禁用窗口,子窗口将始终位于所有者之上,直到关闭为止。像这样:

SomeWindow childWindow = new SomeWindow();
childWindow.Owner = this;
childWindow.Show();