关于网友提出的“双击控件时只触发双击事件,不触发单击事件怎么样做”问题疑问,本网通过在网上对“双击控件时只触发双击事件,不触发单击事件怎么样做”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:双击控件时只触发双击事件,不触发单击事件怎么样做
描述: 双击控件时只触发双击事件,不触发单击事件怎么样做
解决方案1:
那如果我第一次是单击事件,第二次我同样也想触发的是单击事件。这方法明显就不可取了啊
解决方案2: 我觉得有多种思路,首先我先假设你在讨论winform了,那么最粗糙的一种思路是加时间控件。
单机和双机都是触发时间控件,而所谓的单击事件和双击事件都是在时间控件内来处理,具体是弹出菜单还是关闭窗体,由时间间隔决定。比如你单击后时间控件就开始走,走到1秒还是没有其他事情发生,那就触发单击事件,并且stop时间控件,如果在1秒内,又单击一次,那么就触发双击事件(由于双击是关闭,所以你就不用费心那个时间控件了),当然时间控件没那么容易,你得考虑很多UI线程的问题,我只是给你一个粗糙的思路。
另外还有一个思路:就是不要搞这么蛋疼的功能行么亲,让需求和设计人员好好讨论一下行不。
解决方案3: 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
}
}
最好判断下两次点击的时间间隔
解决方案4: mousedoubleclick
解决方案5: 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();
}
}
///
/// 代理委托
///
private delegate void AddItemDelegate();
///
/// 数据绑定
///
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秒内是否有再次点击,如果是,那么不执行单击事件,只执行双击事件。
解决方案6:
你把代码看懂了再说吧。
解决方案7: 理解下什么叫单击,什么叫双击
以上介绍了“双击控件时只触发双击事件,不触发单击事件怎么样做”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1621019.html