Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 屏幕窗体上的绘图控件_C#_Windows_Winforms - Fatal编程技术网

C# 屏幕窗体上的绘图控件

C# 屏幕窗体上的绘图控件,c#,windows,winforms,C#,Windows,Winforms,我在flowLayoutPanel中有一个拖放操作。现在,当拖动某个控件时,我希望该控件显示为鼠标在鼠标坐标上移动 我的主课上有这个 Panel dragAble = new Panel(); 在我的dragDrop事件中,我有这个 dragAble.Width = item.Width; dragAble.Height = item.Height; dragAble.Left = e.X; dragAble.Top = e.Y; 其中,我将新控件(必须显示)的宽度和高度指定给拖动宽度和高度

我在flowLayoutPanel中有一个拖放操作。现在,当拖动某个控件时,我希望该控件显示为鼠标在鼠标坐标上移动

我的主课上有这个

Panel dragAble = new Panel();
在我的dragDrop事件中,我有这个

dragAble.Width = item.Width;
dragAble.Height = item.Height;
dragAble.Left = e.X;
dragAble.Top = e.Y;
其中,我将新控件(必须显示)的宽度和高度指定给拖动宽度和高度。并将其坐标设置为鼠标坐标

我需要在dragEnter事件处理程序上绘制它。如何在屏幕上显示


在Windows中也是如此,当拖动文件或文件夹时,您可以在拖动时看到它。

您可以使用MouseDown、MouseMove、MouseUp事件来处理此问题 创建一个类似IsMouseDown=false的布尔标志 在MouseDown上设置为true 在MouseMove上检查flage是否为true,然后更改left和top属性dragAble.left=e.X; 可排水。顶部=e.Y;
在MouseUp上,只需将IsMouseDown设置为false

您需要将自定义光标(如isipro)与此处的教程结合使用

这比你可能想做的要多一些,但这也是一个相当复杂的问题

编辑:
这里有一些代码可以满足您的要求。它本可以设计得更好,但它的要点是:

class Dragger
{
    private readonly Form _parent;
    private Panel _dragee;

    public Dragger(Form parent)
    {
        _parent = parent;
    }

    public void MouseMoved(object sender, MouseEventArgs e)
    {
        if (_dragee != null)
        {
            _dragee.Location = _parent.PointToClient(Cursor.Position);
        }
    }

    public void StartDragging(Panel panel)
    {
        _dragee = panel;
    }

    public void StopDragging()
    {
        _dragee = null;
    }
}


public partial class Form1 : Form
{
    private readonly Dragger _dragger;

    public Form1()
    {
        InitializeComponent();
        _dragger = new Dragger(this);
        panel1.MouseMove += _dragger.MouseMoved;
        panel1.MouseDown += panel1_MouseDown;
        panel1.MouseUp += panel1_MouseUp;
    }

    void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        _dragger.StopDragging();
    }

    void panel1_MouseDown(object sender, MouseEventArgs e)
    {

        _dragger.StartDragging((Panel)sender);
    }

}
重要提示:如果单击并拖动面板,对象本身就是开始生成mousemove事件的对象。所以你必须倾听他们,而不是形式本身。您还需要确保拖动的控件位于前面


祝你好运——事实上,自定义光标就是解决问题的方法:)

这并不能解决问题。问题是如何绘制。是的,如何在鼠标位置绘制新控件。这个怎么样?我需要这样的东西。当用鼠标拖动时,你也可以看到可拖动控件。你需要能够在窗体之间拖动还是只在单个窗体上拖动?你看到了吗?是的,我看到了,但不能使用:/Mike,只有一个窗体意味着我必须创建一个新的光标?我不能在鼠标位置上画那个控件吗?迈克?这可能是个坏主意-你必须把光标画在上面,它可能看起来很难看。自定义光标是正确的答案。动态移动控件(而不是答案)将更有问题。也就是说,我要去看戏,看看我能为黑客做些什么。你有什么新东西吗?迈克?非常感谢迈克:)为我工作了!:)我很高兴。如果它解决了您的问题,请将其标记为答案:)