【问题标题】:Drog and Drop TableLayoutPanel in a panel?在面板中拖放 TableLayoutPanel?
【发布时间】:2015-05-15 11:29:36
【问题描述】:

我正在尝试使用 winforms/c# 在面板中拖放 tablelayoutpanel,tablelayout 的拖动成功,但问题是 tablelayoutpanel 没有出现! 请问有什么解决办法吗??

private void Registration_Load(object sender, EventArgs e)
{   
     panel2.AllowDrop = true;
     tableLayoutPanel1.AllowDrop = true;
     panel2.DragEnter += panel2_DragEnter;   
     panel2.DragDrop += panel2_DragDrop;
     tableLayoutPanel1.MouseDown += tableLayoutPanel1_MouseDown;
}   

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

private void panel2_DragDrop(object sender, DragEventArgs e)
{
     ((TableLayoutPanel)e.Data.GetData(typeof(TableLayoutPanel))).Parent (Panel)sender;                
}
private void tableLayoutPanel1_MouseDown(object sender, MouseEventArgs e)
{
     tableLayoutPanel1.DoDragDrop(tableLayoutPanel1, DragDropEffects.Move);
}

【问题讨论】:

    标签: c# .net winforms c#-4.0 drag-and-drop


    【解决方案1】:

    代码不充分,您至少需要设置放置的 TLP 的 Location 属性,以确保它在面板边界内和/或位于鼠标光标处。并且 Z 顺序很重要,设置 Parent 属性将其置于底部以便它可以很容易地与面板中的其他控件重叠,您需要 BringToFront()。

    试试这个:

        private void panel2_DragEnter(object sender, DragEventArgs e) {
            if (e.Data.GetDataPresent(typeof(TableLayoutPanel))) e.Effect = DragDropEffects.Move;
        }
    
        private void panel2_DragDrop(object sender, DragEventArgs e) {
            var tlp = (TableLayoutPanel)e.Data.GetData(typeof(TableLayoutPanel));
            tlp.Location = panel2.PointToClient(new Point(e.X, e.Y));
            tlp.Parent = panel2;
            tlp.BringToFront();
        }
    

    【讨论】:

    • 请问如何在拖放后明确保存 TLP 的新位置?
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2011-07-18
    • 2013-01-31
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多