C# 计时器、单击、鼠标下移、鼠标悬停事件不在一起工作

C# 计时器、单击、鼠标下移、鼠标悬停事件不在一起工作,c#,timer,click,mousedown,mouseup,C#,Timer,Click,Mousedown,Mouseup,在我遇到的问题上寻求帮助 对不起,如果已经有人问过这个问题,我找不到类似的问题 这个想法是当点击picturebox时,将图像更改为ON 如果按住图片框超过2秒以打开新表单并将图片框保持为关闭状态 但是,如果点击picturebox并保持2秒钟,然后返回,我需要picturebox状态保持打开 以下是我到目前为止所做的尝试 我相信为了让它正常工作,我需要阻止MouseUp事件的发生 有没有办法在滴答声出现时阻止鼠标移动 有没有更简单/更好的方法 任何帮助都将不胜感激 private vo

在我遇到的问题上寻求帮助

对不起,如果已经有人问过这个问题,我找不到类似的问题

这个想法是当点击picturebox时,将图像更改为ON

如果按住图片框超过2秒以打开新表单并将图片框保持为关闭状态

但是,如果点击picturebox并保持2秒钟,然后返回,我需要picturebox状态保持打开

以下是我到目前为止所做的尝试

我相信为了让它正常工作,我需要阻止MouseUp事件的发生

有没有办法在滴答声出现时阻止鼠标移动

有没有更简单/更好的方法

任何帮助都将不胜感激

    private void time_HoldDownInternal_Tick(object sender, EventArgs e)
    { 
        time_HoldDownInternal.Enabled = false;
        time_HoldDownInternal.Interval = 1000;
        form1show.Visible = true;
    }

    private void pb_pictureBoxTest_MouseDown(object sender, MouseEventArgs e)
    {
        mainMenuVariables.mousedown = true;
        time_HoldDownInternal.Enabled = true;
    }

    private void pb_pictureBoxTest_MouseUp(object sender, MouseEventArgs e)
    {
        mainMenuVariables.mousedown = false;
        //MessageBox.Show("mouse up");
        time_HoldDownInternal.Enabled = false;
        time_HoldDownInternal.Interval = 1000;
    }

    private void pb_pictureBoxTest_Click(object sender, EventArgs e)
    {
        if (mainMenuVariables.mousedown == true)
        {
            if (mainMenuVariables.pictureBox == false)
            {
                mainMenuVariables.pictureBox = true;
                pb_pictureBoxTest.Image = new Bitmap(mainMenuVariables.pictureBoxOn);
                return;
            }
            if (mainMenuVariables.pictureBox == true)
            {
                mainMenuVariables.pictureBox = false;
                pb_pictureBoxTest.Image = new Bitmap(mainMenuVariables.pictureBoxOff);
                return;
            }
        }
        if (mainMenuVariables.mousedown == false)
        {
            //nothing
        }
    }

与其启动计时器,不如用鼠标记录当前时间。然后在鼠标向上移动,检查是否已经过2秒。e、 g:

private void pb_pictureBoxTest_MouseDown(object sender, MouseEventArgs e)
{
    mainMenuVariables.mousedown = true;
    mainMenuVariables.mousedowntime = DateTime.Now;
}

private void pb_pictureBoxTest_MouseUp(object sender, MouseEventArgs e)
{
    mainMenuVariables.mousedown = false;
    var clickDuration = DateTime.Now - mainMenuVariables.mousedowntime;

    if ( clickDuration > TimeSpan.FromSeconds(2))
    {
        // Do 'hold' logic (e.g. open dialog, etc)
    }
    else
    {
        // Do normal click logic (e.g. toggle 'On'/'Off' image)
    }
}

我现在会考虑这样做,但是如果已经打开或关闭了图像,那么如何打开/关闭图像呢?@justin89查看我上面的编辑-根据您的代码添加了一个代码示例。效果很好,我唯一想更改的是表单现在在您放开后打开。我想让窗体在按住按钮2秒钟后立即显示,我也在考虑将代码添加到鼠标下,但它似乎不起作用。再次感谢你的帮助。[code]var clickDuration=DateTime.Now-mainMenuVariables.mousedowntime;如果(单击持续时间>时间跨度从秒数(2)){//Do'hold'逻辑(例如打开对话框等)}else[/code]@justin89 Hmmm,很好。如果您希望它在2秒钟后打开对话框,无论用户是否已释放鼠标按钮,您都必须使用计时器。这是可能的,只是有点复杂。我将使用与上面相同的方法,并结合一个计时器。计时器滴答声事件随后启动对话框。在鼠标向上的事件中,只需检查“如果”(clickDuration