使用 C# 和 .Net 框架 2.0。我有一个 MDI 应用程序,需要处理拖动/拖放事件。我有一个停靠在我的应用程序左侧的列表,并且希望能够从列表中拖动一个项目并将其放在 MDI 客户区域中,并为该项目打开正确的 MDI 子项。我似乎无法弄清楚在哪里附加处理程序。我已经尝试附加到主窗体的事件和作为窗体一部分的 MdiClient,但是当我期望它们调用时,似乎都没有调用事件处理程序。
我也在使用 Infragistics 选项卡式 MDI 管理器,所以我不确定这是否会影响它。
使用 C# 和 .Net 框架 2.0。我有一个 MDI 应用程序,需要处理拖动/拖放事件。我有一个停靠在我的应用程序左侧的列表,并且希望能够从列表中拖动一个项目并将其放在 MDI 客户区域中,并为该项目打开正确的 MDI 子项。我似乎无法弄清楚在哪里附加处理程序。我已经尝试附加到主窗体的事件和作为窗体一部分的 MdiClient,但是当我期望它们调用时,似乎都没有调用事件处理程序。
我也在使用 Infragistics 选项卡式 MDI 管理器,所以我不确定这是否会影响它。
我有一个实现 Infragistics MDI DockManager(不是 Tabbed MDI)的应用程序,但我认为它们非常相似。当您处理 MDI 表单事件时,它应该可以工作。
作为最后的手段:如果一切都失败了,请尝试联系 Infragistics 支持。
这段代码对我有用。它会在 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;
}
}