我想在DragEnter和DragLeave事件中觸發拖動目標控件重繪自己(通過無效或刷新)。代碼看起來是這樣的:在拖放過程中重繪
protected override void OnDragEnter (DragEventArgs drgargs)
{
//-- Set a property that affects drawing of control, then redraw
this.MyProperty = true;
this.Refresh(); //-- Does nothing???
}
protected override void OnDragLeave (EventArgs e)
{
//-- Set a property that affects drawing of control, then redraw
this.MyProperty = false;
this.Refresh(); //-- Does nothing???
}
實際上它並不重繪控制,OnPaint方法不被刷新()這些事件中調用。有沒有辦法做到這一點?我不能在這裏理解一些東西。
更新:傑森提供的答案實際上並不工作。當使用Invalidate()或Invalidate(rect)時,控件不會實際更新。這是期間拖放操作。任何其他想法?你可以觸發一個控制重繪期間拖放?謝謝!
更新2:我創建了一個示例項目,無法得到這個不工作。唉......我終於把它追蹤到了導致問題的OnPaint中的一些代碼。所以,結果更多的是我不瞭解調試器的工作方式(它從來沒有在OnPaint中達到斷點...仍然不知道爲什麼)。 Invalidate(),Refresh()都可以工作。 JasonH得到了答案,因爲它最終是正確的,並且還顯示瞭如何使控制的一部分失效......我不知道這一點。
感謝您的幫助!
我的猜測是你沒有設置AllowDrop爲true。 – jasonh 2009-07-23 20:39:35
是的,AllowDrop設置爲true。拖放正在發生。只是重繪控件不是(OnPaint不會在Invalidate()或Refresh())之後調用。 – 2009-07-24 16:22:53