2008-11-20 16 views
0

Utilisation de C# et de .Net framework 2.0. J'ai une application MDI et j'ai besoin de gérer les événements de dragover/dragdrop. J'ai une liste ancrée à gauche sur mon application et j'aimerais pouvoir faire glisser un élément de la liste et le déposer dans la zone client MDI et avoir l'enfant MDI correct pour l'élément ouvert. Je n'arrive pas à comprendre où attacher le gestionnaire. J'ai essayé d'attacher aux événements de la forme principale et le MdiClient qui fait partie du formulaire, mais aucun gestionnaire d'événement ne semble être appelé quand je m'attends à eux. J'utilise également un gestionnaire MDI à onglets Infragistics, donc je ne sais pas si cela l'affecte.Comment configurer un gestionnaire pour les événements de dragover/dragdrop dans la zone client MDI?

Répondre

2

J'ai une application qui implémente l'Infragistics MDI DockManager (pas MDI à onglets), mais je pense que ceux-ci sont très similaires. Cela devrait fonctionner lorsque vous manipulez les événements de formulaire MDI.

  • MDIForm.AllowDrop est défini sur true?
  • L'objet que vous essayez de faire glisser est-il sérialisable?
  • Essayez l'événement DragEnter au lieu de DragOver

En dernier recours: si tout le reste échoue, essayez de contacter Infragistics Support.

0

Ce code a fonctionné pour moi. Il ouvre un nouvel enfant MDI en déposant du texte sur le formulaire parent MDI.

... 
using System.Linq; 
... 

public partial class Form1 : Form 
{ 
    MdiClient mdi_client; 
    public Form1() 
    { 
     InitializeComponent(); 
     mdi_client = this.Controls.OfType<MdiClient>().FirstOrDefault(); 
     mdi_client.AllowDrop = true; 
     mdi_client.DragEnter += Form1_DragEnter; 
     mdi_client.DragDrop += Form1_DragDrop; 
    } 

    private void Form1_DragDrop(object sender, DragEventArgs e) 
    { 
     myForm m = new myForm(); 
     m.Text = (string)e.Data.GetData(typeof(string)); 
     m.MdiParent = this; 
     m.Show(); 
     m.Location = mdi_client.PointToClient(new Point(e.X, e.Y)); 
    } 

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