2009-10-14 8 views
1

Je souhaite avoir une autre copie d'un contrôle en le faisant glisser et en le déposant sur un autre formulaire. Mon code entraîne le déplacement de tout le contrôle. Est-il possible d'afficher les deux à la fois étant donné que je veux qu'ils aient la même référence parce que la source met à jour les valeurs toutes les secondes.Faire glisser et déposer un contrôle d'un formulaire à un autre entraîne le déplacement du contrôle

voici mon code

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

Répondre

1

Un contrôle ne peut être placé sur un récipient (forme) à la fois. Ce que vous voulez faire est de créer une nouvelle instance du contrôle sur le formulaire de destination. Ainsi, plutôt que:

tableLayoutPanel1.Controls.Add(gauge); 

do

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

alors besoin de vous lier le contrôle à la même source de données que le contrôle d'origine, supposant que vous avez une source bien sûr de données facilement liables. Les propriétés du contrôle que vous avez définies lors de la conception ne seront pas appliquées à la nouvelle instance de contrôle. Vous devrez copier le code d'initialisation du contrôle à partir du fichier du concepteur sur le formulaire d'origine.

0

Vous pouvez afficher un contrôle (permet l'appeler A) deux fois en créant un panneau (appelons-le B) de la même taille et en utilisant un VisualBrush ar l'arrière-plan B. Et paramètre A comme visuel du pinceau visuel .

Toutefois, c'est un gaz inerte « image » du contrôle et ne répondra pas à l'entrée, etc.

Une approche plus robuste est de créer une autre instance du contrôle et de la lier aux mêmes données sous-jacentes que l'original .

Questions connexes