使用背景图像在面板/窗体中拖动时,“自定义控件”会“消失”

时间:2013-06-14 13:43:02

标签: c# custom-controls draggable drag

我正在用C#编写一个引脚板,我需要能够在电路板上拖动纸片(注释)。我已经将笔记作为自定义控件,因为我也需要能够在它们上面写。 customcontrol(注释)的背景是一张纸的图像。当我 使用backgroundimage时,对于电路板本身,一切都按预期工作。我可以拖动笔记(带有backgroundimage的customcontrols)就好了 - 没有闪烁。当我在棋盘上使用背景图像时(我想要做的,因为纯色背景不能为我剪切),我无法再顺畅地拖动音符。当我开始拖动时,音符消失,并在我停止移动鼠标时首先重新绘制。

我在面板(在它的构造函数中)使用以下代码,我在其中拖动笔记,但它只解决了我的初始屏幕闪烁问题。

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;
    }
}

1 个答案:

答案 0 :(得分:0)

由于我无法解决我的问题,自定义控件在被拖动到成像背景时消失了,我决定创建一个asp.net版本的项目,而不是一个Windows窗体应用程序。这也可以防止跨平台兼容性的问题。现在使用jQuery

完成拖动