.NET:是否有单击并拖动“类似桌面”控件

本文关键字:桌面 类似桌面 控件 拖动 是否 单击 NET | 更新日期: 2023-09-27 17:47:22

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

因此,我的问题是:.NET 中是否有一个控件可以使用项集合来近似此行为?

我正在考虑类似于"LargeIcon"模式下的列表视图,但它允许您将图标拖动到控件内的不同位置。

.NET:是否有单击并拖动“类似桌面”控件

可以通过实现拖放来使用标准 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);
    }
  }
}

我认为最接近的是ListView控件,但即使这样也更像是一个资源管理器窗口。 您也许能够创建自己的视图来执行您想要的操作,但您需要手动将图标位置保留在某个位置。

如果你不反对使用 WPF,Josh Smith 创建了一个非常整洁的画布,我目前正在将其用于一个项目。 它允许您添加控件并在画布周围拖动它们。 您必须处理画布上加载的内容以及下次加载程序的位置,但这非常简单。http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx

这取决于这是Windows应用程序还是基于Web浏览器的应用程序。无论哪种情况,您都需要某种容器来管理控件的位置。您可以使用控件的 X 和 Y 坐标管理容器内控件的位置。

您将使用拖动事件处理实际移动。因此,在拖动时有拖动开始(您可能会显示占位符图形或更改光标),最后是拖动结束(将控件的 x 和 y 设置为新位置)。显然,这些不是实际的事件名称,但搜索"如何处理拖动事件"应该可以让您入门。

在Web环境中,我知道jquery内置了拖动功能。所以你可能想看看这个。您必须注意的一件大事是在回发之间保持控件的位置。我不确定在这种情况下会发生什么。

Windows 使用 ListView32 ,一个具有拖放占位符功能、自定义边框的内部控件......

图标位置可以存储在 XML 文件或应用程序设置中(通过将 XML 作为字符串放置并在需要时将其转换为文件)。

例如,您可以执行以下操作:

<icons>
    <icon1>
        <name>Icon1</name>
        <text>My PC</text>
        <imageIndex>16</imageIndex>
    </icon1>
    <icon2>
        .....
    </icon2>            
    .....
</icons>

洛伦佐