2

その中に ItemViewer と呼ばれる別のコントロールを含む RackViewer と呼ばれるコントロールがあります。RackViewer コントロールは、別の親コントロールに動的に追加されます。親コントロール内で、ユーザーがアイテムを RackViewer 内の ItemViewer コントロールにドラッグしたときにイベントが発生するように、ドラッグ ドロップ イベントを作成したいと考えています。現在、私は次のようにしています:

private void RackView_DragEnter(object sender, DragEventArgs e)
{
    RackViewer rackView = (RackViewer)sender;
    if (rackView.IsMouseOnItemViewer(rackView.PointToClient(new Point(e.X, e.Y))))
    {
        //content goes here
    }
}

private void RackView_DragDrop(object sender, DragEventArgs e)
{
    RackViewer rackView = (RackViewer)sender;
    if(rackView.IsMouseOnItemViewer(rackView.PointToClient(new Point(e.X, e.Y))))
    {
        //content goes here
    }
}

private void listbox_MouseDown(object sender, MouseEventArgs e)
{
    ListBox dragDropSender = (ListBox)sender;
    int index = dragDropSender.IndexFromPoint(new Point(e.X, e.Y));
    if (index >= 0)
    {
        dragDropSender.SelectedIndex = index;
        dragDropSender.DoDragDrop(dragDropSender.SelectedItem, DragDropEffects.Move);
    }
}

IsMouseOnItemViewer メソッドに注意してください。このメソッドは RackViewer クラスに含まれており、ドラッグ ドロップ イベント シーケンスに進む前に、ユーザーがアイテムを ItemViewer にドラッグしていることを確認します。これを行う理由は、RackViewer の親コントロールから ItemViewer にアクセスできないためです。これは、階層で 2 つ上のコントロールであるためです。「IsMouseOnItemViewer」メソッドは次のようになります。

    public ItemViewer View { get {return itemViewer; } }

/// <param name="mousePoint"> The coordinates of the mouse in client coordinates. </param>
    /// <returns> True if the user is hovering over the ItemViewer control and false otherwise.</returns>
    public bool IsMouseOnItemViewer(Point mousePoint)
    {
        if (View.Bounds.Contains(mousePoint))
            return true;
        else
            return false;
    }

しかし、何らかの理由で、このイベントは決して true を返しません! マウスを RackViewer コントロールのどこにドラッグしても、ItemViewer 上にあることを決して検出しないようです。私は何を間違っていますか?

4

1 に答える 1

0

エラーが見つかりました。私の問題は、dragEnter イベントが 1 回だけ発生し、マウスがアイテムをラックビューアー上にドラッグするとすぐに発生することでした。したがって、マウスが実際に ItemViewer に到達する時間はありません。ご協力いただきありがとうございます。DragEnter よりも動的なものを使用する必要があります。

于 2013-04-11T15:57:08.627 に答える