Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将ToolStripMenuItem拖放到ListView中_C#_Winforms - Fatal编程技术网

C# 将ToolStripMenuItem拖放到ListView中

C# 将ToolStripMenuItem拖放到ListView中,c#,winforms,C#,Winforms,在c windows应用程序中使用Menustrip和ToolStripMenuItem。已将我的代码粘贴到下面。我试图实现的是能够右键单击菜单项并将其拖动到listview中 此外,当在listview中选择该项时,我需要访问菜单项属性 这是我在上面场景中的代码,这里我需要帮助 当对ToolStripItem的MouseDown事件调用DoDragDrop方法时,此时“发送方”是ToolStripItem对象,但当在listview上发生DragDrop时,“发送方”显然变成ListViewI

在c windows应用程序中使用Menustrip和ToolStripMenuItem。已将我的代码粘贴到下面。我试图实现的是能够右键单击菜单项并将其拖动到listview中

此外,当在listview中选择该项时,我需要访问菜单项属性

这是我在上面场景中的代码,这里我需要帮助

当对ToolStripItem的MouseDown事件调用DoDragDrop方法时,此时“发送方”是ToolStripItem对象,但当在listview上发生DragDrop时,“发送方”显然变成ListViewItem

是否有任何方法可以在ListView dragdrop事件中获取ToolStripItem对象引用

请导游

using System;
using System.Collections.Generic; 
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace testmenudrag
{
    public partial class Form1 : Form
    {
        MenuStrip mmenu = new MenuStrip();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ToolStripMenuItem mnulevel1 = new ToolStripMenuItem();
            mnulevel1.Text = "First Level";

            ToolStripMenuItem mnulevel2 = new ToolStripMenuItem();
            mnulevel2.Text = "Second Level";

            ToolStripMenuItem mnulevel3 = new ToolStripMenuItem();
            mnulevel3.Text = "Third Level";
            mnulevel3.Tag = 3;
            mnulevel3.MouseDown += mnulevel3_MouseDown;

            mnulevel2.DropDown.Items.Add(mnulevel3);
            mnulevel1.DropDown.Items.Add(mnulevel2);
            mmenu.Items.Add(mnulevel1);
            this.Controls.Add(mmenu);
        }

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

        private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                // The below code generates a cast error since here
                // Object sender is a listviewitem
                ToolStripMenuItem mmnu = (ToolStripMenuItem)sender;

                 // Tried the below code too, in this case, mmnu is null 
                 ToolStripMenuItem mmnu =                                     
                e.Data.GetData(typeof(ToolStripMenuItem)) as 
                 ToolStripMenuItem;

                String menuitemstr = mmnu.Text;
                ListViewItem lv = new ListViewItem(menuitemstr);
                listView1.Items.Add(lv);
            }
            catch
            {
            }
        }

        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;
        }
    }
}
由于某些原因,在拖放操作期间,ToolStripMenuItem被强制转换为ToolStripItem。以下代码更新有效:

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

private void listView1_DragDrop(object sender, DragEventArgs e)
{
  try
  {
    // see the contained types
    var formats = e.Data.GetFormats();
    Array.ForEach(formats, item => Debug.WriteLine("Supported format: " + item.ToString()));

    ToolStripItem mmnu = e.Data.GetData(typeof(ToolStripItem)) as ToolStripItem;

    String menuitemstr = mmnu.Text;
    ListViewItem lv = new ListViewItem(menuitemstr);
    listView1.Items.Add(lv);
  }
  catch(Exception ex)
  {
    Debug.WriteLine("listView1_DragDrop exception: " + ex);
  }
}