拖放面板中的TableLayoutPanel

本文关键字:TableLayoutPanel 拖放 | 更新日期: 2023-09-27 17:49:25

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

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

拖放面板中的TableLayoutPanel

代码是不够的,您至少需要设置放置的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();
    }

相关文章:
  • 没有找到相关文章