Как настроить обработчик для событий dragover / dragdrop в клиентской области MDI? - PullRequest
0 голосов
/ 20 ноября 2008

Использование C # и .Net framework 2.0. У меня есть приложение MDI и мне нужно обрабатывать события dragover / dragdrop. У меня есть приложение, прикрепленное слева к моему приложению, и я хотел бы иметь возможность перетаскивать элемент из списка, помещать его в клиентскую область MDI и иметь правильный дочерний элемент MDI для открытого элемента. Я не могу понять, где прикрепить обработчик. Я пытался прикрепить события основной формы и MdiClient, который является частью формы, но ни один из обработчиков событий, кажется, не вызывается, когда я ожидаю их.

Я также использую MDI Manager с вкладками Infragistics, поэтому я не уверен, влияет ли это на него.

Ответы [ 2 ]

2 голосов
/ 20 ноября 2008

У меня есть приложение, которое реализует DockManager Infragistics MDI (не MDI с вкладками), но я думаю, что они очень похожи. Это должно работать при обработке событий формы MDI.

  • MDIForm.AllowDrop имеет значение true?
  • Сериализуем ли объект, который вы пытаетесь перетащить?
  • Попробуйте событие DragEnter вместо DragOver

В крайнем случае: если ничего не помогает, попробуйте связаться со службой поддержки Infragistics.

0 голосов
/ 25 октября 2010

Этот код работал для меня. Он открывает нового потомка MDI при отбрасывании текста в родительской форме 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;
    }
}
...