2

OK、まずコンテキストを確認するために Windows デスクトップを見てください。デスクトップ上の項目 (フォルダー、ファイル) を別の場所にドラッグすると、ドラッグした場所に「とどまる」ことができます。これは、ユーザーがアイテムの独自の「グループ」を作成できるようにするための非常に便利な機能のようです。

したがって、私の質問は次のとおりです。アイテムのコレクションでこの動作を近似する .NET のコントロールはありますか?

「LargeIcon」モードのリストビューのようなものを考えていますが、アイコンをコントロール内の別の場所にドラッグできます。

4

5 に答える 5

6

ドラッグアンドドロップを実装することにより、標準の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);
    }
  }
}
于 2008-10-23T20:54:11.487 に答える
1

WPFの使用に反対しない場合は、Josh Smithが、私が現在プロジェクトに使用している非常にきれいなキャンバスを作成しました。コントロールを追加して、キャンバス上でドラッグできます。キャンバスにロードされるものと、プログラムの次のロードの場所を処理する必要がありますが、それは非常に簡単です。 http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx

于 2008-10-23T15:13:30.443 に答える
1

これは、これが Windows アプリケーションであるか、Web ブラウザー ベースのアプリケーションであるかによって異なります。どちらの場合でも、コントロールの場所を管理するために何らかのコンテナが必要です。X 座標と Y 座標を使用して、コンテナー内のコントロールの位置を管理できます。

ドラッグ イベントを使用して実際の動きを処理します。つまり、ドラッグ中にドラッグを開始し (プレースホルダー グラフィックを表示するか、カーソルを変更することができます)、最後にドラッグを終了します (コントロールの x と y を新しい位置に設定します)。明らかに、これらは実際のイベント名ではありませんが、「ドラッグ イベントの処理方法」を検索することから始めてください。

Web 環境では、jquery にドラッグ機能が組み込まれていることを知っています。注意が必要な 1 つの重要な点は、ポストバック間でコントロールの位置を維持することです。この場合、どうなるかわかりません。

于 2008-10-23T15:14:34.607 に答える
1

最も近いのは ListView コントロールだと思いますが、それでもエクスプローラー ウィンドウに似ています。必要なことを行う独自のビューを作成できる場合がありますが、アイコンの場所をどこかに手動で保持する必要があります。

于 2008-10-23T14:34:15.060 に答える
0

Windows はListView32、ドラッグ アンド ドロップ プレースホルダー機能を備えた内部コントロール、カスタム境界線を使用しています...

アイコンの場所は、XML ファイルまたはアプリケーション設定に保存できます (XML を文字列として配置し、必要に応じてファイルに変換します)。

たとえば、次のことができます。

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

ロレンツォ

于 2016-05-03T13:38:44.943 に答える