【问题标题】:Drag and Drop Windows Forms: Controls disappear after dragging拖放 Windows 窗体:拖动后控件消失
【发布时间】:2017-03-28 20:45:21
【问题描述】:

我需要在面板之间拖动标签。但是当我试图在初始面板中删除标签时,它就会消失。这是我使用的方法的代码:

private void label1_MouseDown(object sender, MouseEventArgs e)
{
     if (e.Button == MouseButtons.Left)
     DoDragDrop(sender, DragDropEffects.All);
}


private void panel_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.All;
}


private void panel_DragDrop(object sender, DragEventArgs e)
{
    Label src = e.Data.GetData(typeof(Label)) as Label;
    src.Location = PointToClient(new Point(e.X, e.Y));
}

为面板启用了AllowDrop。为什么标签会消失,我该如何解决?

【问题讨论】:

    标签: c# winforms drag-and-drop


    【解决方案1】:

    标签仍然包含在 Form 中,因此它只是在 面板之后。

    要么...

    (1) 将标签放在最前面:

        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            Label src = e.Data.GetData(typeof(Label)) as Label;
            src.Location = this.PointToClient(new Point(e.X, e.Y));
            src.BringToFront();
        }
    

    或者,

    (2)使Panel包含Label,并将坐标调整到Panel的客户端坐标系:

        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            Panel pnl = sender as Panel;
            Label src = e.Data.GetData(typeof(Label)) as Label;
            src.Location = pnl.PointToClient(new Point(e.X, e.Y));
            pnl.Controls.Add(src);
        }
    

    【讨论】:

    • 第一种方法不起作用,但第二种方法起作用了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多