2012-01-12 101 views
0

在windows窗体我有ListView和FlowLayoutPanel的拖放不起作用

我想从列表视图中拖动列表视图到FlowLayoutPanel中这样

我使用DragEnter事件

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

和在FlowLayoutPanel中激活DragDrop

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

问题在于它没有“他们的牛逼工作不输入任何此事件,任何想法如何使他们回车我错过任何财产

问候

回答

2

下面是一个简单的例子来说明基础你需要什么

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); 
} 
2

您将DragEnter事件放在错误的控件上,您必须使用面板。我想我知道你是如何陷入这种麻烦的,ListView没有任何事件表明用户开始拖动一个项目。你需要自己综合。基本的方法是记录鼠标向下的位置并使用MouseMove事件来检查用户是否将鼠标移动得足够远以开始拖动。像这样:

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); 
      } 
     } 
    }