WPF 防止按钮Click时间多次点击响应

可能不是最好的办法,但是用起来效果也还是可以的。

原理:通过IsEnabled属性来控制按钮状态。btnConfirm.IsEnabled  / this.IsEndbled 这两种方式是等价的。

案例比较简单,如果后期做开发的话代码量变大,只在结尾添加 this.IsEndbled = true ,逻辑上是有缺陷的。如果txtName为空是不是又要给IsEndbled = True 这样重新赋值。 如果是多个if条件呢这样的话会很繁琐。

所以我就用上了异常捕获

使用 try{    要执行的代码    }catch(Exception ex){    异常    }finally{    最后执行的代码    }

finally

当一个异常抛出时,它会改变程序的执行流程。因此不能保证一个语句结束后,它后面的语句一定会执行,在 C# 中这个问题可以用 finally 解决。

为了确保一个语句总是能执行(不管是否抛出异常),需要将该语句放到一个 finally 块中,finally 要么紧接在 try 块之后,要么紧接在 try 块之后的最后一个 catch 处理程序之后。只要程序进入与一个 finally 块关联的 try 块,则 finally 块始终都会运行 -- 即使发生了一个异常。

Xaml代码:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <TextBox Name="txtName" Height="30" />
            <ProgressBar Name="progressBar1" Maximum="100" Height="42"  />
            <Label Name="label1"></Label>
            <Button Name="btnConfirm" Click="Button_Click_1" Height="30" Content="添加" />
        </StackPanel>
    </Grid>
</Window>

C#代码:

namespace WpfApplication1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            this.IsEnabled = false;

            try
            {
                if (!string.IsNullOrEmpty(txtName.Text))
                {
                    MessageBox.Show("用户名称不能为空!");
                    //this.IsEnabled = true;
                    return;
                }

                for (int i = 0; i <= 100; i++)
                {
                    progressBar1.Value = i;
                    System.Windows.Forms.Application.DoEvents();
                    Thread.Sleep(10);
                    label1.Content = "数据正在加载中(" + i + ")";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message,"错误",MessageBoxButton.OK,MessageBoxImage.Error);
            }
            finally
            {
                this.IsEnabled = true;
            }
        }
    }
}

相关推荐

  1. WPF 防止按钮Click时间多次响应

    2024-03-10 02:12:04       25 阅读
  2. 防止连续按钮多次调用接口

    2024-03-10 02:12:04       9 阅读
  3. vue3 防止按钮的连续(连

    2024-03-10 02:12:04       8 阅读
  4. uni-app多次触发事件,防止重复

    2024-03-10 02:12:04       25 阅读
  5. 【CSS节流】实现防止按钮重复

    2024-03-10 02:12:04       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 02:12:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 02:12:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 02:12:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 02:12:04       20 阅读

热门阅读

  1. Neo4J

    Neo4J

    2024-03-10 02:12:04      25 阅读
  2. Restful风格接口简介

    2024-03-10 02:12:04       22 阅读
  3. css深度选择器 /deep/ 在89版本后就失效了

    2024-03-10 02:12:04       19 阅读
  4. Docker的奇幻漂流

    2024-03-10 02:12:04       21 阅读
  5. 遮蔽云和云雾函数

    2024-03-10 02:12:04       22 阅读
  6. Linux Shell 函数详解

    2024-03-10 02:12:04       20 阅读
  7. Elasticsearch:了解人工智能搜索算法

    2024-03-10 02:12:04       24 阅读
  8. 金融产业化,应当是产业互联网的有机组成部分

    2024-03-10 02:12:04       20 阅读
  9. 贪心算法 —— 字典序删除字符

    2024-03-10 02:12:04       17 阅读
  10. 【老文新说】C++读取.shp文件

    2024-03-10 02:12:04       21 阅读