2009-02-04 67 views
0

我正在使用面板進行自定義控件。我希望能夠拖放它,以便在我的控件的MouseDown事件中實現它。但是當你開始拖拽給用戶一點點反饋時,我想讓這個事情反應。所以在MouseDown中,即使我改變顏色。然後我想在MouseUp事件中將其改回。MouseUp事件中斷?

我的控件沒有安裝到VS2008中,但只是我寫的一個類,我在運行時instanciate(我不知道我需要多少等等)。現在,我的控件暴露了一個MouseDown事件,以便能夠被拖動。當我從父應用程序訂閱此事件以實際執行拖放時,我的控件未在其MouseUp事件上重新繪製!實際上,MouseUp永遠不會被調用。另一方面,如果我沒有訂閱父應用程序中的事件,它會按預期工作。

發生了什麼事?父母是否中斷流程,以便MouseUp事件永遠不會在我的控件中激發?我如何解決這個問題?

+0

你能發表相關的代碼嗎? – hmcclungiii 2009-02-04 15:02:01

+0

我可能會但我覺得它有點複雜。我會先等待一些答案,然後看看我能否隔離代碼。 – 2009-02-04 16:27:59

回答

0

您是否在mousedown事件的自定義控件中捕獲鼠標?嘗試在mousedown上捕獲並釋放mouseup上的捕獲。

+0

你是什麼意思的捕獲? – 2009-02-05 06:50:58

2

我不知道,如果你使用的是Windows窗體或WPF,但在這裏Windows窗體是我的意思:

 
public class DerivedPanel : Panel 
{ 
    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     base.OnMouseDown(e); 
     Capture = true; 
    } 

    protected override void OnMouseUp(MouseEventArgs e) 
    { 
     base.OnMouseUp(e); 
     Capture = false; 
     // Change your color or whatever here 
    } 
} 

在WPF中有兩種方法,CaptureMouse()和ReleaseMouseCapture()來做同樣的事。當控件捕獲鼠標時,即使光標不在控件上,它也會收到鼠標事件。這可能會導致你的問題。見MSDN Article