我希望在DragEnter和DragLeave事件期间触发拖动目标控件重新绘制自身(通过invalidate或refresh)。 代码大致如下:
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???
}
它实际上并没有重新绘制控件,Refresh()在这些事件中不会调用OnPaint方法。有什么方法可以做到这一点吗?我可能在这里理解有误。
更新:jasonh提供的答案实际上并不起作用。当使用Invalidate()或Invalidate(rect)时,控件实际上不会更新。这是在拖放操作期间被调用的。还有其他想法吗?您能在拖放期间触发控件的重绘吗?谢谢!
更新2:我创建了一个示例项目,并无法使其失效。唉...我最终追踪到一些在OnPaint中引起问题的代码。因此,这事实上更多地是我不理解调试器的工作方式(它从未命中OnPaint中的断点...仍然不知道为什么)。Invalidate()、Refresh()都可以工作。JasonH得到了答案,因为它最终是正确的,并且还展示了如何使控件的部分失效...我不知道这一点。谢谢您的所有帮助!