双击控件时只触发双击事件,不触发单击事件怎么样做

时间:2023-01-22 19:27:34
双击控件时只触发双击事件,不触发单击事件怎么样做

28 个解决方案

#1


事件啊~~~~~



双击控件时只触发双击事件,不触发单击事件怎么样做

#2


意思是说一个控件同时有单击和双击事件时候,双击事件不能激发如何解决

#3


又是双击又是单击,双击和单击的区别就在于间隔时间的问题,你这么搞谁知道你怎么触发的,

#4


单击和双击分别执行不同代码,比如单击窗体图标时候弹出菜单,双击时候关闭窗体

#5


那就分别写两个事件不就好了 单击和双击又不会互相矛盾

#6


引用 5 楼 ducker3590 的回复:
那就分别写两个事件不就好了 单击和双击又不会互相矛盾


I see you again~~

#7


分情况讨论:

如果你是web页面,那使用Jquery
有一个dbclick()方法,双击事件。

如果你是winform,可以使用一个折中的办法,放一个隐藏的label.text = 1,点击一次,label的值加1

点击的方法体:
{
   int i =Convert.ToInt32( label.text);
   i++;
   label.text = i.toString();
   if(i%2==0)
       {
           //双击的时候就是你需要的方法了。
       }
}

#8


引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~

双击控件时只触发双击事件,不触发单击事件怎么样做 See You Again 妹子

#9


引用 8 楼 ducker3590 的回复:
引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子


低头看了下,咦,有小弟啊,怎么就变成了妹子了~
   

#10


- -!、、没有两次单击何来双击、、、

#11


这种设计欠合理,可以考虑换下实现思路

#12


比如按钮就没法实现他的双击效果

#13


引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子

低头看了下,咦,有小弟啊,怎么就变成了妹子了~

双击控件时只触发双击事件,不触发单击事件怎么样做好吧 小弟

#14


引用 13 楼 ducker3590 的回复:
引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子

低头看了下,咦,有小弟啊,怎么就变成了妹子了~
好吧 小弟


好吧,大叔~ 双击控件时只触发双击事件,不触发单击事件怎么样做
双击控件时只触发双击事件,不触发单击事件怎么样做

#15


引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子

……

双击控件时只触发双击事件,不触发单击事件怎么样做不是大叔 才22 你说咱这样会不会被版主删帖

#16


引用 15 楼 ducker3590 的回复:
引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You……


应该不会吧,我们是在讨论耶。

#17


引用 16 楼 chungehenyy 的回复:
引用 15 楼 ducker3590 的回复:引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不……

双击控件时只触发双击事件,不触发单击事件怎么样做咱都讨论啥了

#18


引用 17 楼 ducker3590 的回复:
引用 16 楼 chungehenyy 的回复:
引用 15 楼 ducker3590 的回复:引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事……

讨论今天晚饭吃了什么~

双击控件时只触发双击事件,不触发单击事件怎么样做

#19


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool doubleclicked = true;
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            doubleclicked = true;
            //双击对窗体尺寸改变,只是一个例子,你自己可以实现
            this.Size = new Size(new Point(700, 700));
        }

        private void listBox1_Click(object sender, EventArgs e)
        {
            doubleclicked = false;
            Thread th = new Thread(new ThreadStart(signClicked));
            th.Start();
        }
        private void signClicked()
        {
            Thread.Sleep(1000);
            if (!doubleclicked)
            {
                //todo:处理单击事件的逻辑
                AddItem();
            }
        }
        /// <summary>
        /// 代理委托
        /// </summary>
        private delegate void AddItemDelegate();

        /// <summary>
        /// 数据绑定
        /// </summary>
        public void AddItem()
        {
            if (this.InvokeRequired)
            {
                AddItemDelegate m_SetProgressProxy = new AddItemDelegate(AddItem);
                this.Invoke(m_SetProgressProxy, new object[] { });
            }
            else
            {
                this.listBox1.Items.Add(("signClicked" + this.listBox1.Items.Count.ToString()));
            }
        }
    }
}

给你做了个demo,基本原理是使用线程处理,定义一个外部全局变量,确定是否双击。这里强调一下,关键在于把单击事件执行使用sleep滞后,判断在1秒内是否有再次点击,如果是,那么不执行单击事件,只执行双击事件。

#20


我建议你还说不要随便单方面个人去歪曲“单击”概念。你可以重新组织你的描述,不要把单击跟双击对立起来。重新描述你的概念,把话说顺了、不内耗了程序自然就顺利地写出来了。

#21


单击之后你去延时然后判断是否执行相应的功能,这当然还是“触发了单击事件”的。不要自相矛盾。

#22


理解下什么叫单击,什么叫双击

#23


mousedoubleclick

#24


1.webform 
引用jquery
$("#btnID").dbclick(function(){
//do
})
2.winform
int i=0;
protected void btn_click(object sender, EventArgs e)
{
i++;
if(i%2==0)
{
//do
}
}
最好判断下两次点击的时间间隔

#25


我觉得有多种思路,首先我先假设你在讨论winform了,那么最粗糙的一种思路是加时间控件。
单机和双机都是触发时间控件,而所谓的单击事件和双击事件都是在时间控件内来处理,具体是弹出菜单还是关闭窗体,由时间间隔决定。比如你单击后时间控件就开始走,走到1秒还是没有其他事情发生,那就触发单击事件,并且stop时间控件,如果在1秒内,又单击一次,那么就触发双击事件(由于双击是关闭,所以你就不用费心那个时间控件了),当然时间控件没那么容易,你得考虑很多UI线程的问题,我只是给你一个粗糙的思路。

另外还有一个思路:就是不要搞这么蛋疼的功能行么亲,让需求和设计人员好好讨论一下行不。

#26


引用 7 楼 nice_fish 的回复:
分情况讨论:

如果你是web页面,那使用Jquery
有一个dbclick()方法,双击事件。

如果你是winform,可以使用一个折中的办法,放一个隐藏的label.text = 1,点击一次,label的值加1

点击的方法体:
{
   int i =Convert.ToInt32( label.text);
   i++;
   label.text = i.to……


那如果我第一次是单击事件,第二次我同样也想触发的是单击事件。这方法明显就不可取了啊

#27


引用 26 楼 a7383768 的回复:
引用 7 楼 nice_fish 的回复:分情况讨论:

如果你是web页面,那使用Jquery
有一个dbclick()方法,双击事件。

如果你是winform,可以使用一个折中的办法,放一个隐藏的label.text = 1,点击一次,label的值加1

点击的方法体:
{
   int i =Convert.ToInt32( label.tex……


你把代码看懂了再说吧。

#28


在单机里面延时判断是否有双击,如果有则跳出,没有则继续执行不久OK了?

#1


事件啊~~~~~



双击控件时只触发双击事件,不触发单击事件怎么样做

#2


意思是说一个控件同时有单击和双击事件时候,双击事件不能激发如何解决

#3


又是双击又是单击,双击和单击的区别就在于间隔时间的问题,你这么搞谁知道你怎么触发的,

#4


单击和双击分别执行不同代码,比如单击窗体图标时候弹出菜单,双击时候关闭窗体

#5


那就分别写两个事件不就好了 单击和双击又不会互相矛盾

#6


引用 5 楼 ducker3590 的回复:
那就分别写两个事件不就好了 单击和双击又不会互相矛盾


I see you again~~

#7


分情况讨论:

如果你是web页面,那使用Jquery
有一个dbclick()方法,双击事件。

如果你是winform,可以使用一个折中的办法,放一个隐藏的label.text = 1,点击一次,label的值加1

点击的方法体:
{
   int i =Convert.ToInt32( label.text);
   i++;
   label.text = i.toString();
   if(i%2==0)
       {
           //双击的时候就是你需要的方法了。
       }
}

#8


引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~

双击控件时只触发双击事件,不触发单击事件怎么样做 See You Again 妹子

#9


引用 8 楼 ducker3590 的回复:
引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子


低头看了下,咦,有小弟啊,怎么就变成了妹子了~
   

#10


- -!、、没有两次单击何来双击、、、

#11


这种设计欠合理,可以考虑换下实现思路

#12


比如按钮就没法实现他的双击效果

#13


引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子

低头看了下,咦,有小弟啊,怎么就变成了妹子了~

双击控件时只触发双击事件,不触发单击事件怎么样做好吧 小弟

#14


引用 13 楼 ducker3590 的回复:
引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子

低头看了下,咦,有小弟啊,怎么就变成了妹子了~
好吧 小弟


好吧,大叔~ 双击控件时只触发双击事件,不触发单击事件怎么样做
双击控件时只触发双击事件,不触发单击事件怎么样做

#15


引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You Again 妹子

……

双击控件时只触发双击事件,不触发单击事件怎么样做不是大叔 才22 你说咱这样会不会被版主删帖

#16


引用 15 楼 ducker3590 的回复:
引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不会互相矛盾

I see you again~~
 See You……


应该不会吧,我们是在讨论耶。

#17


引用 16 楼 chungehenyy 的回复:
引用 15 楼 ducker3590 的回复:引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事件不就好了 单击和双击又不……

双击控件时只触发双击事件,不触发单击事件怎么样做咱都讨论啥了

#18


引用 17 楼 ducker3590 的回复:
引用 16 楼 chungehenyy 的回复:
引用 15 楼 ducker3590 的回复:引用 14 楼 chungehenyy 的回复:
引用 13 楼 ducker3590 的回复:引用 9 楼 chungehenyy 的回复:
引用 8 楼 ducker3590 的回复:引用 6 楼 chungehenyy 的回复:
引用 5 楼 ducker3590 的回复:那就分别写两个事……

讨论今天晚饭吃了什么~

双击控件时只触发双击事件,不触发单击事件怎么样做

#19


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool doubleclicked = true;
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            doubleclicked = true;
            //双击对窗体尺寸改变,只是一个例子,你自己可以实现
            this.Size = new Size(new Point(700, 700));
        }

        private void listBox1_Click(object sender, EventArgs e)
        {
            doubleclicked = false;
            Thread th = new Thread(new ThreadStart(signClicked));
            th.Start();
        }
        private void signClicked()
        {
            Thread.Sleep(1000);
            if (!doubleclicked)
            {
                //todo:处理单击事件的逻辑
                AddItem();
            }
        }
        /// <summary>
        /// 代理委托
        /// </summary>
        private delegate void AddItemDelegate();

        /// <summary>
        /// 数据绑定
        /// </summary>
        public void AddItem()
        {
            if (this.InvokeRequired)
            {
                AddItemDelegate m_SetProgressProxy = new AddItemDelegate(AddItem);
                this.Invoke(m_SetProgressProxy, new object[] { });
            }
            else
            {
                this.listBox1.Items.Add(("signClicked" + this.listBox1.Items.Count.ToString()));
            }
        }
    }
}

给你做了个demo,基本原理是使用线程处理,定义一个外部全局变量,确定是否双击。这里强调一下,关键在于把单击事件执行使用sleep滞后,判断在1秒内是否有再次点击,如果是,那么不执行单击事件,只执行双击事件。

#20


我建议你还说不要随便单方面个人去歪曲“单击”概念。你可以重新组织你的描述,不要把单击跟双击对立起来。重新描述你的概念,把话说顺了、不内耗了程序自然就顺利地写出来了。

#21


单击之后你去延时然后判断是否执行相应的功能,这当然还是“触发了单击事件”的。不要自相矛盾。

#22


理解下什么叫单击,什么叫双击

#23


mousedoubleclick

#24


1.webform 
引用jquery
$("#btnID").dbclick(function(){
//do
})
2.winform
int i=0;
protected void btn_click(object sender, EventArgs e)
{
i++;
if(i%2==0)
{
//do
}
}
最好判断下两次点击的时间间隔

#25


我觉得有多种思路,首先我先假设你在讨论winform了,那么最粗糙的一种思路是加时间控件。
单机和双机都是触发时间控件,而所谓的单击事件和双击事件都是在时间控件内来处理,具体是弹出菜单还是关闭窗体,由时间间隔决定。比如你单击后时间控件就开始走,走到1秒还是没有其他事情发生,那就触发单击事件,并且stop时间控件,如果在1秒内,又单击一次,那么就触发双击事件(由于双击是关闭,所以你就不用费心那个时间控件了),当然时间控件没那么容易,你得考虑很多UI线程的问题,我只是给你一个粗糙的思路。

另外还有一个思路:就是不要搞这么蛋疼的功能行么亲,让需求和设计人员好好讨论一下行不。

#26


引用 7 楼 nice_fish 的回复:
分情况讨论:

如果你是web页面,那使用Jquery
有一个dbclick()方法,双击事件。

如果你是winform,可以使用一个折中的办法,放一个隐藏的label.text = 1,点击一次,label的值加1

点击的方法体:
{
   int i =Convert.ToInt32( label.text);
   i++;
   label.text = i.to……


那如果我第一次是单击事件,第二次我同样也想触发的是单击事件。这方法明显就不可取了啊

#27


引用 26 楼 a7383768 的回复:
引用 7 楼 nice_fish 的回复:分情况讨论:

如果你是web页面,那使用Jquery
有一个dbclick()方法,双击事件。

如果你是winform,可以使用一个折中的办法,放一个隐藏的label.text = 1,点击一次,label的值加1

点击的方法体:
{
   int i =Convert.ToInt32( label.tex……


你把代码看懂了再说吧。

#28


在单机里面延时判断是否有双击,如果有则跳出,没有则继续执行不久OK了?