gpt4 book ai didi

c# - 在拖放过程中重绘

转载 作者:太空狗 更新时间:2023-10-29 20:26:08 25 4
gpt4 key购买 nike

我想在 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 方法不是由这些事件中的 Refresh() 调用的。有什么办法吗?我一定没有理解这里的东西。

更新:jasonh 提供的答案实际上不起作用。使用 Invalidate() 或 Invalidate(rect) 时,控件实际上不会更新。这是在拖放操作期间 调用的。还有其他想法吗?您能否在拖放过程中触发控件的重绘?谢谢!

更新 2:我创建了一个示例项目,但无法让它工作。唉...我终于找到了导致问题的 OnPaint 中的一些代码。所以,事实证明我更多的是不理解调试器是如何工作的(它从来没有在 OnPaint 中遇到断点......仍然不知道为什么)。 Invalidate()、Refresh() 都有效。 JasonH 得到了答案,因为它最终是正确的,并且还展示了如何使控件的一部分无效......我不知道。

感谢您的帮助!

最佳答案

调用 this.Invalidate() 使 Form/Control 重绘自身。如果您知道特定区域,则调用其中一种重载方法来指定要使什么无效。例如:

Rectangle toInvalidate = new Rectangle(drgargs.X - 50, drgargs.Y - 50, 50, 50);
this.Invalidate(toInvalidate);

这将使拖动目标所在区域周围 50 像素的区域无效。

关于c# - 在拖放过程中重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1168649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com