当前位置:  开发笔记 > 编程语言 > 正文

.NET:是否有点击并拖动"桌面式"控件?

如何解决《.NET:是否有点击并拖动"桌面式"控件?》经验,为你挑选了1个好方法。

好的,首先查看Windows桌面的上下文; 您可以在桌面上获取项目(文件夹,文件)并将它们拖动到不同的位置,然后它们"停留"在您拖动它们的位置.这似乎是一个非常有用的功能,为用户提供,以允许他们创建自己的"分组"的项目.

我的问题是:.NET中是否有一个控件用一组项来近似这种行为?

我正在考虑像"LargeIcon"模式中的listview,但它允许您将图标拖动到控件内的不同位置.



1> Hans Passant..:

您可以通过实现拖放操作,使用标准ListView控件执行此操作.这是一个样本控件,它执行此操作:

using System;
using System.Drawing;
using System.Windows.Forms;

public class MyListView : ListView {
  private Point mItemStartPos;
  private Point mMouseStartPos;

  public MyListView() {
    this.AllowDrop = true;
    this.View = View.LargeIcon;
    this.AutoArrange = false;
    this.DoubleBuffered = true;
  }

  protected override void OnDragEnter(DragEventArgs e) {
    if (e.Data.GetData(typeof(ListViewItem)) != null) e.Effect = DragDropEffects.Move;
  }
  protected override void OnItemDrag(ItemDragEventArgs e) {
    // Start dragging
    ListViewItem item = e.Item as ListViewItem;
    mItemStartPos = item.Position;
    mMouseStartPos = Control.MousePosition;
    this.DoDragDrop(item, DragDropEffects.Move);
  }
  protected override void OnDragOver(DragEventArgs e) {
    // Move icon
    ListViewItem item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;
    if (item != null) {
      Point mousePos = Control.MousePosition;
      item.Position = new Point(mItemStartPos.X + mousePos.X - mMouseStartPos.X,
          mItemStartPos.Y + mousePos.Y - mMouseStartPos.Y);
    }
  }
}

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有