none
如何为panel定义一个鼠标左键连续快速单击5次的事件? RRS feed

  • 问题

  • 不知道题目有没有描述清楚我的意思,anyway,我想在软件里加一个彩蛋/后门,当鼠标左键连击某panel五次就触发一个事件。

    重点:panel1 && 左键 && 连续 && 5次

    任一条件不满足都不触发,还请大大不吝赐教,希望能阐述实现原理~感谢!

    2011年11月18日 8:00

答案

  • 首先可以使用panel1的mouse相关的事件,如mouseClick,mouseLeave,mouseUp,mouseDown等事件。

    其次连续的话我觉得可以使用个timer控件,记录mousedown和up之间的间隔。

    然后用一个全局变量来记录mouse连续点击的次数。

    技术难点在怎么样判断连续点击。您可以往这方面考虑下。以下的代码仅仅贴出了在单击5次的情况下会弹出对话框。但是并没有判断是不是连续单击。

     int i = 1;
            private void panel1_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    if (i<=5)
                    {
                      i= i+ 1;
                        if (i == 5)
                        {
                          MessageBox.Show(i.ToString());
                            i = 1;
                        }
                    }
                    else 
                    {
                        MessageBox.Show(e.Clicks.ToString());
                    }
                }
            }
    
            private void panel1_MouseLeave(object sender, EventArgs e)
            {
                i = 1;
            }
    

    希望对您有所帮助。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月21日 6:43
    版主

全部回复

  • 首先可以使用panel1的mouse相关的事件,如mouseClick,mouseLeave,mouseUp,mouseDown等事件。

    其次连续的话我觉得可以使用个timer控件,记录mousedown和up之间的间隔。

    然后用一个全局变量来记录mouse连续点击的次数。

    技术难点在怎么样判断连续点击。您可以往这方面考虑下。以下的代码仅仅贴出了在单击5次的情况下会弹出对话框。但是并没有判断是不是连续单击。

     int i = 1;
            private void panel1_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    if (i<=5)
                    {
                      i= i+ 1;
                        if (i == 5)
                        {
                          MessageBox.Show(i.ToString());
                            i = 1;
                        }
                    }
                    else 
                    {
                        MessageBox.Show(e.Clicks.ToString());
                    }
                }
            }
    
            private void panel1_MouseLeave(object sender, EventArgs e)
            {
                i = 1;
            }
    

    希望对您有所帮助。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月21日 6:43
    版主
  • 抱歉~时隔多日才回帖,非常感谢版主提供的思路,我这就去试试。
    2012年1月21日 0:59