怎样禁用按钮的点击事件

beihua 2017-10-24 10:00:08
怎样禁用按钮的点击事件
有一个按钮btnConn,需要在点击时将它设置为灰色,在任务线程执行完之前要不能再次被点击执行,
现在可以实现按钮是变成灰色了,但是点击时,又执行了一次点击事件
private void btnConn_Click(object sender, EventArgs e)
{
btnConn.Click -= new EventHandler(btnConn_Click);
btnConn.Enabled = false;
List<Task> taskList = new List<Task>();

for (int x = 0; x < arrInfos.Length; x++)
{
Task refTask = new Task(Func1, arrInfos[x]);
taskList.Add(refTask);
refTask.Start();
Thread.Sleep(100);
}

Task.WaitAll(taskList.ToArray());
btnConn.Click += new EventHandler(btnConn_Click);
btnConn.Enabled = true;
}
...全文
1935 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beihua 2017-10-24
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
点击时,又执行了一次点击事件 -》因为底部这句:btnConn.Click += new EventHandler(btnConn_Click); 点击之后顺序执行,就会执行到这句代码导致又触发一次。 把 btnConn.Click -= new EventHandler(btnConn_Click); 与 btnConn.Click += new EventHandler(btnConn_Click); 删掉。
这个方法不行,已经把btnConn.Click -= new EventHandler(btnConn_Click); 和btnConn.Click += new EventHandler(btnConn_Click); 都删除掉了,在线程没有执行完之前点击,还是会触发点击事件
无情时尚 2017-10-24
  • 打赏
  • 举报
回复
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            new Task(delegate
            {
                Thread.Sleep(2000);

                //2秒后再启用按钮
                this.BeginInvoke((EventHandler) delegate
                {
                    button1.Enabled = true;
                });

            }).Start();
        }
绿领巾童鞋 2017-10-24
  • 打赏
  • 举报
回复
方法 多样 : 1. 不允许 点击的时候 ,ENABLE 或者 VISABLED 设置 为 FALSE 2.像楼上 那样 ,不允许 点击的时候 把按钮 click 事件 的注册 取消了。运行 点击的时候 再加上。 3. 在click 方法体 里面 ,加 一个判断标记 if( !isClickEnabled) { return ; } isClickEnabled 就是 你要控制 的是否 允许点击 的状态标记。
exception92 2017-10-24
  • 打赏
  • 举报
回复
点击之后不需要移除委托,再附加委托。控制IsEnabled属性就行。
exception92 2017-10-24
  • 打赏
  • 举报
回复
点击时,又执行了一次点击事件 -》因为底部这句:btnConn.Click += new EventHandler(btnConn_Click); 点击之后顺序执行,就会执行到这句代码导致又触发一次。 把 btnConn.Click -= new EventHandler(btnConn_Click); 与 btnConn.Click += new EventHandler(btnConn_Click); 删掉。
bbjiabcd 2017-10-24
  • 打赏
  • 举报
回复
刚才想把关键语句变红的,结果无法实现

        private void btnConn_Click(object sender, EventArgs e)
        {
            btnConn.Enabled = false;
            //刷新界面
            Application.DoEvents();
            List<Task> taskList = new List<Task>();
 
            for (int x = 0; x < arrInfos.Length; x++)
            {
                    Task refTask = new Task(Func1, arrInfos[x]);
                    taskList.Add(refTask);
                    refTask.Start();
                    Thread.Sleep(100);
            }
 
            Task.WaitAll(taskList.ToArray());
            btnConn.Enabled = true;
        }
bbjiabcd 2017-10-24
  • 打赏
  • 举报
回复

private void btnConn_Click(object sender, EventArgs e)
        {
            btnConn.Enabled = false;
            Application.DoEvents();
            List<Task> taskList = new List<Task>();

            for (int x = 0; x < arrInfos.Length; x++)
            {
                    Task refTask = new Task(Func1, arrInfos[x]);
                    taskList.Add(refTask);
                    refTask.Start();
                    Thread.Sleep(100);
            }

            Task.WaitAll(taskList.ToArray());
            btnConn.Enabled = true;
        }

exception92 2017-10-24
  • 打赏
  • 举报
回复
引用 5 楼 beihua 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 点击时,又执行了一次点击事件 -》因为底部这句:btnConn.Click += new EventHandler(btnConn_Click); 点击之后顺序执行,就会执行到这句代码导致又触发一次。 把 btnConn.Click -= new EventHandler(btnConn_Click); 与 btnConn.Click += new EventHandler(btnConn_Click); 删掉。
这个方法不行,已经把btnConn.Click -= new EventHandler(btnConn_Click); 和btnConn.Click += new EventHandler(btnConn_Click); 都删除掉了,在线程没有执行完之前点击,还是会触发点击事件[/quote]

 private async void btnConn_Click(object sender, EventArgs e)
        {
            btnConn.Enabled = false;
            await Task.Factory.StartNew(() =>
            {
                List<Task> taskList = new List<Task>();
                for (int x = 0; x < arrInfos.Length; x++)
                {
                    Task refTask = new Task(Func1, arrInfos[x]);
                    taskList.Add(refTask);
                    refTask.Start();
                    Thread.Sleep(100);
                }
            });
            btnConn.Enabled = true;
。net framework 4.5或版本以上。
依然冷暖 2017-10-24
  • 打赏
  • 举报
回复
e.handle=TRUE 也有点用处

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧