【发布时间】:2010-11-13 05:01:58
【问题描述】:
我想在 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???
}
它实际上并没有重绘控件,这些事件中的 Refresh() 不会调用 OnPaint 方法。有没有办法做到这一点?我一定不明白这里的一些东西。
更新: jasonh 提供的答案实际上不起作用。使用 Invalidate() 或 Invalidate(rect) 时,控件实际上不会更新。这是在拖放操作期间调用。还有其他想法吗?您可以在拖放期间触发控件的重绘吗?谢谢!
更新 2:我创建了一个示例项目,但无法使其不工作。叹息......我终于找到了导致问题的 OnPaint 中的一些代码。所以,结果证明我更多的是不理解调试器是如何工作的(它从来没有在 OnPaint 中遇到断点......仍然不知道为什么)。 Invalidate()、Refresh() 都有效。 JasonH 得到了答案,因为它最终是正确的,并且还展示了如何使控件的一部分无效……我不知道。
感谢您的帮助!
【问题讨论】:
-
我的猜测是您没有将 AllowDrop 设置为 true。
-
是的,AllowDrop 设置为 true。拖放正在发生。只是控件的重绘不是(在 Invalidate() 或 Refresh() 之后不调用 OnPaint)。
标签: c# .net drag-and-drop