0

C# と .Net Framework 2.0 を使用します。MDI アプリケーションがあり、ドラッグオーバー/ドラッグドロップ イベントを処理する必要があります。アプリケーションの左側にドッキングされたリストがあり、リストから項目をドラッグして MDI クライアント領域にドロップし、項目の正しい MDI 子を開きたいと考えています。ハンドラーをどこにアタッチすればよいかわかりません。メイン フォームのイベントとフォームの一部である MdiClient にアタッチしようとしましたが、どちらのイベント ハンドラーも呼び出されると思われるときに呼び出されないようです。

Infragistics Tabbed MDI Manager も使用しているため、それが影響しているかどうかはわかりません。

4

2 に答える 2

2

Infragistics MDI DockManager (タブ付き MDI ではない) を実装するアプリケーションがありますが、それらは非常に似ていると思います。MDI フォーム イベントを処理するときに動作するはずです。

  • MDIForm.AllowDrop が true に設定されていますか?
  • ドラッグしようとしているオブジェクトはシリアライズ可能ですか?
  • DragOver の代わりに DragEnter イベントを試す

最後の手段として: 他のすべてが失敗した場合は、インフラジスティックス サポートに連絡してみてください。

于 2008-11-20T16:16:51.690 に答える
0

このコードは私のために働いた。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;
    }
}
于 2010-10-25T10:08:53.040 に答える