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