Как настроить обработчик событий перетаскивания/перетаскивания в клиентской области MDI?

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

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


person Beardo    schedule 20.11.2008    source источник


Ответы (2)


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

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

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

person Vincent Van Den Berghe    schedule 20.11.2008

Этот код работал для меня. Он открывает новый дочерний элемент 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;
    }
}
person Shlomi Loubaton    schedule 25.10.2010