【发布时间】:2013-06-14 13:43:02
【问题描述】:
我正在用 C# 编写一个海报板,我需要能够在板上拖动纸片(笔记)。我已经将笔记作为自定义控件,因为我也需要能够在它们上书写。自定义控件(便笺)的背景是一张纸的图像。当我不使用背景图像时,对于电路板本身,一切都按预期工作。我可以很好地拖动笔记(带有背景图像的自定义控件) - 没有闪烁。当我在板上使用背景图像时(我想这样做,因为纯色背景不适合我),我不能再顺利地拖动笔记了。当我开始拖动时,便笺消失了,当我停止移动鼠标时,它首先重新绘制。
我在面板上(在其构造函数中)使用以下代码,在其中拖动笔记,但它只解决了我最初的屏幕闪烁问题。
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
用于背景的图像文件被导入到项目资源中。我尝试将图像文件加载到位图对象中,并将该对象用作面板的背景图像,但这并没有改变任何东西。
下面是一张说明拖拽笔记时应有的图片的链接:
http://i.stack.imgur.com/9LnKj.jpg
下面是我开始拖动笔记时的实际外观图片:
http://i.stack.imgur.com/x0Lf1.png
请询问您是否需要更多详细信息才能帮助我解决问题。非常感谢您对问题的任何帮助和建议!提前致谢。
编辑:第二张图片上注释的大小取决于我将它从初始点拖动多远。当我将它拖得比它的大小更远时,我可以让它完全消失。当我停止移动鼠标时,它会重新绘制。
编辑:我使用以下代码来移动笔记:
private void NoteControl_MouseMove(object sender, MouseEventArgs e)
{
if (_dragme)
{
System.Drawing.Point newLocation = e.Location - mouseOffset;
this.Left += newLocation.X;
this.Top += newLocation.Y;
}
}
【问题讨论】:
-
不确定问题是什么。我认为您是在说您不希望“笔记”在被拖动时改变大小?如果有,请贴出相关代码,让用户可以拖动它们...
-
感谢您的回复。你明白了,但不是问题所在。当我的海报板上没有图像背景时 - 一切都按预期工作。笔记很好地拖动。当我使用图像作为海报板的背景时,我无法再流畅地拖动笔记了。当我拖动一个音符时,它会缩小(因为它没有正确重绘)并且只有在我停止拖动它时才会重绘。我认为问题是由用于背景的图像太大(1920、1080、~300kb)以及代码如何处理背景和注释的重绘过程引起的。
标签: c# custom-controls draggable drag