在屏幕上绘制控件 Winforms

本文关键字:控件 Winforms 绘制 屏幕 | 更新日期: 2023-09-27 17:56:06

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

我的主要课程中有这个

Panel dragAble = new Panel();

在我的拖放事件中,我有这个

dragAble.Width = item.Width;
dragAble.Height = item.Height;
dragAble.Left = e.X;
dragAble.Top = e.Y;

我在哪里分配新控件(必须显示)宽度和高度以拖动宽度和高度。 并将其坐标设置为鼠标坐标。

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

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

在屏幕上绘制控件 Winforms

您可以使用

MouseDown,MouseMove,MouseUp事件来处理此问题创建一个布尔标志,如 IsMouseDown=false在"鼠标按下"上,将"鼠标按下"设置为 true在鼠标移动上检查 flage 是否为真,然后更改左侧和顶部属性 dragAble.Left = e.X;dragAble.Top = e.Y;在 MouseUp 上,只需将 IsMouseDown 设置为 false

您需要

将自定义光标(如 isipro 推荐)与此处的教程相结合 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(v=vs.110).aspx

这比您可能想要的要多一些工作,但这也是一个相当复杂的问题。

编辑:
下面是一些执行您要求的代码。 它可以设计得更好,但它明白了重点:

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

重要说明:如果单击面板并拖动它,则对象本身就是开始生成鼠标移动事件的东西。 所以你必须听他们的话,而不是形式本身。 您还需要确保拖动的控件位于前面。

祝你好运 - 实际上,自定义光标是要走:)