如何区分单击和双击事件
2017-10-27 17:53
681 查看
当我们做Winform项目的时候,有可能会遇到这样的需求,当一个控件上既绑定了单击事件又绑定了双击事件,这样就会遇到一个问题,我们的双击事件没有触发之前,往往先触发了单击事件,影响到了用户的操作。如果让系统区分用户是进行了单击还是双击事件,就显得非常必要了。
我们看一下微软上面是不是有解决办法。
混滚点击操作
这些例子要求:对System,System.Drawing和System.Windows.Forms程序集的引用。
我们看一下微软上面是不是有解决办法。
混滚点击操作
using System; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MouseRollBackSingleClick { public class Form1 : Form { private DoubleClickButton button1; private FormBorderStyle initialStyle; public Form1() { initialStyle = this.FormBorderStyle; this.ClientSize = new System.Drawing.Size(292, 266); button1 = new DoubleClickButton(); button1.Location = new Point (40,40); button1.Click += new EventHandler(button1_Click); button1.AutoSize = true; this.AllowDrop = true; button1.Text = "Click or Double Click"; button1.DoubleClick += new EventHandler(button1_DoubleClick); this.Controls.Add(button1); } // Handle the double click event. void button1_DoubleClick(object sender, EventArgs e) { // Change the border style back to the initial style. this.FormBorderStyle = initialStyle; MessageBox.Show("Rolled back single click change."); } // Handle the click event. void button1_Click(object sender, EventArgs e) { this.FormBorderStyle = FormBorderStyle.FixedToolWindow; } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } } public class DoubleClickButton : Button { public DoubleClickButton() : base() { // Set the style so a double click event occurs. SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true); } } }
区分MouseDown事件中的点击次数
using System; using System.Drawing; using System.Windows.Forms; namespace SingleVersusDoubleClick { class Form1 : Form { private Rectangle hitTestRectangle = new Rectangle(); private Rectangle doubleClickRectangle = new Rectangle(); private TextBox textBox1 = new TextBox(); private Timer doubleClickTimer = new Timer(); private ProgressBar doubleClickBar = new ProgressBar(); private Label label1 = new Label(); private Label label2 = new Label(); private bool isFirstClick = true; private bool isDoubleClick = false; private int milliseconds = 0; [STAThread] public static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } public Form1() { label1.Location = new Point(30, 5); label1.Size = new Size(100, 15); label1.Text = "Hit test rectangle:"; label2.Location = new Point(30, 70); label2.Size = new Size(100, 15); label2.Text = "Double click timer:"; hitTestRectangle.Location = new Point(30, 20); hitTestRectangle.Size = new Size(100, 40); doubleClickTimer.Interval = 100; doubleClickTimer.Tick += new EventHandler(doubleClickTimer_Tick); doubleClickBar.Location = new Point(30, 85); doubleClickBar.Minimum = 0; doubleClickBar.Maximum = SystemInformation.DoubleClickTime; textBox1.Location = new Point(30, 120); textBox1.Size = new Size(200, 100); textBox1.AutoSize = false; textBox1.Multiline = true; this.Paint += new PaintEventHandler(Form1_Paint); this.MouseDown += new MouseEventHandler(Form1_MouseDown); this.Controls.AddRange(new Control[] { doubleClickBar, textBox1, label1, label2 }); } // Detect a valid single click or double click. void Form1_MouseDown(object sender, MouseEventArgs e) { // Verify that the mouse click is in the main hit // test rectangle. if (!hitTestRectangle.Contains(e.Location)) { return; } // This is the first mouse click. if (isFirstClick) { isFirstClick = false; // Determine the location and size of the double click // rectangle area to draw around the cursor point. doubleClickRectangle = new Rectangle( e.X - (SystemInformation.DoubleClickSize.Width / 2), e.Y - (SystemInformation.DoubleClickSize.Height / 2), SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height); Invalidate(); // Start the double click timer. doubleClickTimer.Start(); } // This is the second mouse click. else { // Verify that the mouse click is within the double click // rectangle and is within the system-defined double // click period. if (doubleClickRectangle.Contains(e.Location) && milliseconds < SystemInformation.DoubleClickTime) { isDoubleClick = true; } } } void doubleClickTimer_Tick(object sender, EventArgs e) { milliseconds += 100; doubleClickBar.Increment(100); // The timer has reached the double click time limit. if (milliseconds >= SystemInformation.DoubleClickTime) { doubleClickTimer.Stop(); if (isDoubleClick) { textBox1.AppendText("Perform double click action"); textBox1.AppendText(Environment.NewLine); } else { textBox1.AppendText("Perform single click action"); textBox1.AppendText(Environment.NewLine); } // Allow the MouseDown event handler to process clicks again. isFirstClick = true; isDoubleClick = false; milliseconds = 0; doubleClickBar.Value = 0; } } // Paint the hit test and double click rectangles. void Form1_Paint(object sender, PaintEventArgs e) { // Draw the border of the main hit test rectangle. e.Graphics.DrawRectangle(Pens.Black, hitTestRectangle); // Fill in the double click rectangle. e.Graphics.FillRectangle(Brushes.Blue, doubleClickRectangle); } } }
这些例子要求:对System,System.Drawing和System.Windows.Forms程序集的引用。
相关文章推荐
- C# 中如何区分鼠标的单击或双击事件
- 在 MouseDown 事件中区分单击和双击
- Windows如何区分鼠标双击和两次单击
- (转)MFC:Windows如何区分鼠标双击和两次单击
- 如何区分按键单击和双击
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- js中单击和双击事件的区分
- iOS touch事件区分单击双击响应的方法
- Windows如何区分鼠标双击和两次单击
- js区分鼠标单击和双击事件
- Windows如何区分鼠标双击和两次单击
- js鼠标双击的时候如何屏蔽单击事件呢
- Android中的onTouch()事件如何区分单击事件和滑动事件
- jquery 区分鼠标单击双击事件插件
- iPhone开发之区分 touch 事件是单击还是双击的方法
- 区分 touch 事件是单击还是双击的方法
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- JQuery如何实现双击事件时不触发单击事件
- Windows/MFC 如何区分鼠标双击和两次单击
- windows环境下如何区分单击和双击