2012-05-02 89 views
3

尋找在具有定時器,鼠標​​,鼠標按下,鼠標鬆開事件不是一起工作

對不起,如果這個問題已經被問,我找不到任何類似的問題即時通訊一些幫助。

的想法是當點擊一個圖片被改變的圖像爲ON。

如果圖片框保持超過2秒,打開一個新的形式和離開的PictureBox爲OFF。

但是,如果圖片框上點擊,然後保持2秒,然後返回我需要的PictureBox的狀態留在。

這是我到目前爲止嘗試過的。

我相信這才能正常工作,我需要從存在的停止MouseUp事件。

有沒有一種方法,當出現蜱我可以停止的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 
     } 
    } 

回答

5

而不是啓動一個計時器,只是記錄下鼠標的當前時間。然後在鼠標上,檢查它是否已經2秒。例如:

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) 
    } 
} 
+0

我會看看現在這樣做,但如果已經打開或關閉,如何更改圖像打開/關閉? – justin89

+0

@ justin89查看我上面的編輯 - 根據您的代碼添加了一個代碼示例。 – Tyson

+0

效果很好,我想改變的唯一的事情就是現在打開你的表格之後。我想使窗體出現一個按鈕已被保持2秒 即時通訊尋找添加您的代碼到mousedown以及但它似乎並沒有工作。再次感謝你的幫助。 [代碼] 變種clickDuration = DateTime.Now - mainMenuVariables.mousedowntime; 如果(clickDuration> TimeSpan.FromSeconds(2)) { //待辦事項 '保持' 邏輯(例如打開的對話框等) } 別的 [/代碼] – justin89