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

问题描述 投票:0回答:3

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

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

在每种方法?

c# wpf button
3个回答
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();

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
}

0
投票

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

SomeWindow childWindow = new SomeWindow();
childWindow.Owner = this;
childWindow.Show();
© www.soinside.com 2019 - 2024. All rights reserved.