【问题标题】:C# - Drag item out of listview into a trash can?C# - 将列表视图中的项目拖到垃圾桶中?
【发布时间】:2011-02-21 23:58:37
【问题描述】:

如何将一个项目从 Winforms-listview 控件拖到另一个控件上(垃圾桶图片)?

更新1:

我认为基本流程是:

  • 对于列表视图上的 ItemDrag 事件有一个 DoDragDrop
  • 然后在图片框上设置一个 DragEnter 事件来捕获该拖动?

更新 2:

基本流程(基于答案):

  • 将“ItemDrag”事件添加到列表视图。
  • 在“ItemDrag”中添加一个“DoDragDrop”
  • 将“DragEnter”事件添加到图片框。
  • 在“DragEnter”中添加“GetDataPresent”检查以检查数据类型
  • 向图片框添加“DragDrop”事件
  • 在“DragEnter”中添加“GetDataPresent”检查以检查数据类型

【问题讨论】:

    标签: c# winforms drag-and-drop


    【解决方案1】:

    为列表视图的 ItemDrag 事件实现一个事件处理程序:

        private void listView1_ItemDrag(object sender, ItemDragEventArgs e) {
            DoDragDrop(e.Item, DragDropEffects.Move);
        }
    

    并为垃圾桶编写事件处理程序:

        private void trashCan_DragEnter(object sender, DragEventArgs e) {
            if (e.Data.GetDataPresent(typeof(ListViewItem))) {
                e.Effect = DragDropEffects.Move;
            }
            // others...
        }
    
        private void trashCan_DragDrop(object sender, DragEventArgs e) {
            if (e.Data.GetDataPresent(typeof(ListViewItem))) {
                var item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;
                item.ListView.Items.Remove(item);
            }
            // others...
        }
    

    您必须强制 PictureBox 的 AllowDrop 属性,它在“属性”窗口中不可用:

        public Form1() {
            InitializeComponent();
            trashCan.AllowDrop = true;
        }
    

    【讨论】:

    • 谢谢@Hans!这些样本确实帮助我走上了正确的道路。
    【解决方案2】:

    【讨论】:

    • 感谢@KMan MSDN 链接很有帮助。
    【解决方案3】:

    EDIT 这仅适用于您希望外壳集成拖放的情况。如果您没有与外壳集成,而只是在您自己的应用程序中的事物之间拖放,那么这个答案不适用。对于造成的混乱,我深表歉意。


    您需要在您的应用或控件中支持拖放操作。这涉及到一些 COM 互操作。

    一开始看起来有点复杂,但是一旦你有了基本的骨架,实现起来就不是那么难了。这里还有一个很好的指南,告诉你如何:

    http://blogs.msdn.com/adamroot/pages/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx

    【讨论】:

    • 在应用程序中支持拖放应该不需要 COM 互操作,AFAIK(注意 “到另一个控件(垃圾桶图片)”
    • 哇@Cheeso - 看起来确实很复杂 - 以后可能对更高级的视觉效果有用。
    • 啊,弗雷德里克,你是对的!我误解了这个问题。只有在进行外壳集成的拖放时,才需要 COM 互操作。我的错。我已经更新了这篇文章,并对此进行了说明。
    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2013-09-18
    • 2011-07-23
    相关资源
    最近更新 更多