C# - 将MenuStrip项拖到ListBox

时间:2014-06-23 15:50:47

标签: c#

我想允许用户将任何项目从MenuStrip拖动到ListBox。 我在ListBoxes之间做过,但是不能用MenuStrip做到。 非常感谢你的帮助。

我使用WinForms,C#

对于目标ListBox,我修改了它的属性     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可拖动。

感谢所有人的帮助。

2 个答案:

答案 0 :(得分: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);
            }
    }

答案 1 :(得分:0)

拖动菜单条项与ListBox项相同。 检查你的代码...