我的桌面现在非常混乱所以我决定创建一个程序,您可以在其中拖动文件并创建快捷方式。当文件被拖入时,我抓取文件的图标和名称并保存,然后通过OnPaint()将它们绘制到WinForm。我遇到这个问题,因为即使在我将文件拖入表单之前,OnPaint()也会绘制一个巨大的红色X并且不会更新。这是我的代码(这是一张图片):
OnPaint方法:
我的问题是,无论如何都要延迟OnPaint()方法等到它获取正确绘制所需的某些数据,或者我可以使用任何其他绘图方法将图标+文件名粘贴到WinForm?
P.S:我尝试过使用Thread.Sleep,但后来我意识到它睡眠了主线程,因此不会发生拖放过程
答案 0 :(得分:1)
我看到两个选项。
首先是我在评论中所说的内容..使表单无效以使OnPaint
在拖放后被调用:
foreach (string path in filePath)
{
// your other code here (PS: Paste code next time)
}
this.Invalidate();
您的另一个选择..是使用您可以在OnPaint
:
bool canDraw = false;
// dragdrop event:
foreach (string path in filePath)
{
// your other code here (PS: Paste code next time)
}
canDraw = true;
// OnPaint:
if (canDraw) {
// do your painting here
canDraw = false;
}
base.OnPaint(e); // make sure you defer to the base painting method too
第二个选项有效地延迟了你的绘画,直到你说它没关系..但只有你的自定义绘画。您将base.OnPaint
调用退出条件,以便始终可以在需要时进行绘制。