Como você configurar um manipulador para os eventos dragover / dragdrop na área do cliente MDI?
-
08-07-2019 - |
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.
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;
}
}