2015-05-15 27 views
0

我想拖放一個tablelayout面板使用winforms/c#的面板,拖動tablelayout工作成功,但問題是,tablelayoutpanel不會出現! 任何解決方案,請??面板中的Drog和Drop 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); 
} 

回答

0

的代碼是不夠的,你需要至少設置下降TLP的位置屬性,以確保它是面板範圍內和/或位於鼠標光標。而且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(); 
    } 
+0

請我怎麼能definitly的TLP的保存新的位置後,拖動和Drop? –