English 中文(简体)
Drag Drop don t work
原标题:Drag Drop doesn t work

缩略语

我想从名单到流动语言。

概览一

private void listViewGUI_DragEnter(object sender, DragEventArgs e)
        {
}

and in the FlowLayoutPanel I activate the DragDrop

private void fpnlDisplayedGUI_DragDrop(object sender, DragEventArgs e)
        {
}

问题在于,它不从事任何此类活动,而如果我没有任何财产,那么我会知道如何让他们进入。

最佳做法

问题回答

以下是你需要的basics的简单例子:

public Form1()
{
    InitializeComponent();

    panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
    panel2.AllowDrop = true;
    panel2.DragEnter += new DragEventHandler(panel2_DragEnter);
    panel2.DragDrop += new DragEventHandler(panel2_DragDrop);
}

void panel2_DragDrop(object sender, DragEventArgs e)
{
    //handle the drop here.
}

void panel2_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}

void panel1_MouseDown(object sender, MouseEventArgs e)
{
    panel1.DoDragDrop("whatever you want draged.", DragDropEffects.Move);
}

You put the DragEnter event on the wrong control, you must use the panel s. I think I know how you got into this trouble, ListView doesn t have any event that indicates the user started dragging an item. You ll need to synthesize that yourself. The basic approach is to record the mouse down position and use the MouseMove event to check if the user has moved the mouse far enough to start a drag. Like this:

    private Point dragMousePos;

    private void listView1_MouseDown(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) dragMousePos = e.Location;
    }

    private void listView1_MouseMove(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            int dx = Math.Abs(e.X - dragMousePos.X);
            int dy = Math.Abs(e.Y - dragMousePos.Y);
            if (dx >= SystemInformation.DoubleClickSize.Width ||
                dy >= SystemInformation.DoubleClickSize.Height) {
                var item = listView1.GetItemAt(dragMousePos.X, dragMousePos.Y);
                if (item != null) listView1.DoDragDrop(item, DragDropEffects.Move);
            }
        }
    }




相关问题
Bring window to foreground after Mutex fails

I was wondering if someone can tell me what would be the best way to bring my application to the foreground if a mutex was not able to be created for a new instance. E.g.: Application X is running ...

How to start WinForm app minimized to tray?

I ve successfully created an app that minimizes to the tray using a NotifyIcon. When the form is manually closed it is successfully hidden from the desktop, taskbar, and alt-tab. The problem occurs ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

Handle DataTable.DataRow cell change event

I have a DataTable that has several DataColumns and DataRow. Now i would like to handle an event when cell of this DataRow is changed. How to do this in c#?

Apparent Memory Leak in DataGridView

How do you force a DataGridView to release its reference to a bound DataSet? We have a rather large dataset being displayed in a DataGridView and noticed that resources were not being freed after the ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

WPF-XAML window in Winforms Application

I have a Winforms application coded in VS C# 2008 and want to insert a WPF window into the window pane of Winforms application. Could you explain me how this is done.

热门标签