2014-06-23 79 views
-3

我想讓用戶拖動任何項目從MenuStrip到列表框。 我之間做了ListBoxes,但不能用MenuStrip。 非常感謝您的幫助。C# - 拖動MenuStrip項目到列表框

我使用的WinForms,C#

對於目的地列表框我修改其屬性 this.listBox2.AllowDrop = true; 並創建了以下兩個事件:

private void listBox2_DragOver(
object sender, System.Windows.Forms.DragEventArgs e) 
{ 
e.Effect=DragDropEffects.All; 
} 


private void listBox2_DragDrop(
object sender, System.Windows.Forms.DragEventArgs e) 
{ 
if(e.Data.GetDataPresent(DataFormats.StringFormat)) 
{ 
    string str= (string)e.Data.GetData(
     DataFormats.StringFormat);    
    listBox2.Items.Add(str); 
} 
} 

我需要的是什麼應該做源的MenuStrip允許從ListBox中拖拽項目,以及如何使MenuStrip可拖拽。

感謝大家的幫助。

+0

您可以發佈您的代碼嗎?人們更容易指出你出錯的地方。 – Steve

+0

UI的技術是什麼?的WinForms? WPF?您需要向我們展示一些代碼 – Tomtom

+0

我使用WinForms,C# –

回答

0

拖拽菜單項條是同樣喜歡ListBox項目。 檢查您的代碼...

1

我找到了解決辦法: 丟失的事件是,我要補充事件ToolStripMenuItem_MouseDown,我更喜歡用右鍵點擊,而不是左擊,以避免ToolStripMenuItem_Click和拖動事件之間的矛盾,這個代碼:

  AllowDrop = true; 

private void tsmi_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
      DoDragDrop(sender, System.Windows.Forms.DragDropEffects.Copy); 
    } 

還添加以下代碼到ListView:

private void lvAllowDropListView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
    { 
     System.Windows.Forms.ToolStripMenuItem button = e.Data.GetData(typeof(System.Windows.Forms.ToolStripMenuItem)) 
         as System.Windows.Forms.ToolStripMenuItem; 
     if (button != null) 
      { 
     try 
     { 
      SmallImageList = sysIcons.SmallIconsImageList; 
      LargeImageList = sysIcons.LargeIconsImageList; 

      System.Windows.Forms.ToolStripMenuItem item = e.Data.GetData(typeof(System.Windows.Forms.ToolStripMenuItem)) 
         as System.Windows.Forms.ToolStripMenuItem; 
      if (item != null) 
      { 
       AddToolStripMenuItem(item.Text, item.Name); 
      } 
     } 
     catch { } 
      } 
    } 
    private void AddToolStripMenuItem(string name, string tag) 
    { 
     System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem(name); 
     int Index = -1; 
     for (int i = 0; i < Items.Count;i++) 
      if(Items[i].Tag.ToString() == tag) 
      { 
       Index = i; 
       break; 
      } 
      if (Index == -1) 
      { 
       item.Tag = tag; 
       Items.Add(item); 
      } 
    }