Como você configurar um manipulador para os eventos dragover / dragdrop na área do cliente MDI?

StackOverflow https://stackoverflow.com/questions/305665

Pergunta

Usando C # eo framework .Net 2.0. Tenho uma aplicação MDI e precisa lidar com eventos dragover / dragdrop. Eu tenho uma lista encaixada à esquerda no meu aplicativo e gostaria de ser capaz de arrastar um item da lista e solte-o na área do cliente MDI e ter o filho MDI correta para o item aberto. Eu não consigo descobrir onde vai fixar o manipulador. Eu tentei ligar para os eventos do formulário principal eo MdiClient que faz parte da forma, mas nenhum manipulador de eventos parece ter chamado quando eu espero que eles.

Eu também estou usando um Infragistics Tabbed MDI Manager, então eu não tenho certeza se é isso que afeta-lo.

Foi útil?

Solução

Eu tenho um aplicativo que implementa o Infragistics MDI DockManager (não Tabbed MDI), mas eu acho que esses são muito semelhantes. Ele deve funcionar quando você lidar com os eventos de formulário MDI.

  • MDIForm.AllowDrop é definido como verdadeiro?
  • É o objeto que você está tentando serializável arrastar?
  • Tente o evento DragEnter vez de DragOver

Como um último recurso:. Se tudo o mais falhar, tente contactar o Suporte Infragistics

Outras dicas

Este código funcionou para mim. Ele abre um novo filho MDI em deixar cair algum texto no formulário pai 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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top