2009-10-14 96 views
1

我想將某個控件的另一個副本拖放到另一個窗體時。我的代碼導致移動整個控件。是否有辦法一次顯示它們中的兩個,因爲我希望它們具有相同的引用,因爲源每秒更新一次值。將控件從一個窗體拖放到另一個窗體導致移動控件

這裏是我的代碼

public partial class DragDropForm : Form 
{ 
    public DragDropForm() 
    { 
     InitializeComponent(); 
    } 

    private void tableLayoutPanel1_DragEnter(object sender, DragEventArgs e) 
    { 
     object data = e.Data.GetData(e.Data.GetFormats()[0]); 
     if (data is GaugeContainer) 
     { 
      GaugeContainer gauge = data as GaugeContainer; 
      tableLayoutPanel1.Controls.Add(gauge); 
     } 
     else if (data is DataGridView) 
     { 
      DataGridView table = data as DataGridView; 
      tableLayoutPanel1.Controls.Add(table); 

     } 
    } 

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



    // IN THE SOURCE FORM !!!! 
    private void topCompaniesGridView_MouseDown(object sender, MouseEventArgs e) 
    { 
     this.DoDragDrop(this.topCompaniesGridView, DragDropEffects.Copy); 
    } 

回答

1

的控制只能在一個容器(形式),在同一時間內選址。你想要做的是在目標表單上創建一個新的控件實例。因此,而不是:

tableLayoutPanel1.Controls.Add(gauge); 

tableLayoutPanel1.Controls.Add(new GaugeContainer()); 
// Bind to same data source as original control here... 

然後,您需要到控制到同一數據源作爲原始控件綁定,假設你有當然是一個很容易綁定數據源。您可能在設計時設置的控件上的屬性不會應用於新的控件實例。您需要從原始表單上的設計器文件複製控制初始化代碼。

0

通過創建相同大小的面板(讓我們稱之爲B)並使用VisualBrush和B的Background來顯示控件(讓它稱爲A)兩次。並將A設置爲Visual Brush的Visual 。

然而,這是在控制的惰性「圖像」,並且不會響應輸入等

更健壯的方法是創建控制的另一個實例,並將其綁定到相同的基礎數據的原始。

相關問題