【问题标题】:CustomControl "disappears" when dragged in panel/form with backgroundimage使用背景图像拖动到面板/表单中时,CustomControl“消失”
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2012-11-27
    • 2015-12-09
    相关资源
    最近更新 更多