ファイルをにドラッグアンドドロップできるプログラムを作成しようとしていますListView
。私はListView.InsertionMark
ファイルを挿入する場所を識別するために使用します。ファイルをドロップしても、イベントがトリガーされないInsertionMark
ため、は消えません。DragLeave
ドラッグアンドドロップ効果をに変更すると、マウスを離したときDragDropEffects.None
にDragLeave
イベントがトリガーされます。なぜこうなった?
また、ドキュメントには、「キーボードまたはマウスボタンの状態が変化した場合、イベントが発生し、ドラッグを続行するか、データをドロップするか、またはプロパティのQueryContinueDrag
値に基づいて操作をキャンセルするかが決定されます。Action
イベントのQueryContinueDragEventArgs
。」ただし、QueryContinueDrag
イベントもトリガーされません。
public partial class MainForm : Form
{
private ListView listView1 = new ListView();
public MainForm()
{
InitializeComponent();
this.Controls.Add(listView1);
listView1.Dock = DockStyle.Fill;
listView1.View = View.Details;
listView1.Columns.Add("Test");
listView1.Items.Add("0");
listView1.AllowDrop = true;
listView1.DragEnter += listView1_DragEnter;
listView1.DragOver += listView1_DragOver;
listView1.DragLeave += listView1_DragLeave;
listView1.DragDrop += listView1_DragDrop;
listView1.GiveFeedback += listView1_GiveFeedback;
listView1.QueryContinueDrag += listView1_QueryContinueDrag;
}
private void listView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Link | DragDropEffects.Scroll;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void listView1_DragOver(object sender, DragEventArgs e)
{
// This is not done, only to show this problem.
listView1.InsertionMark.Index = 0;
listView1.InsertionMark.AppearsAfterItem = true;
}
private void listView1_DragLeave(object sender, EventArgs e)
{
listView1.InsertionMark.Index = -1;
}
private void listView1_DragDrop(object sender, DragEventArgs e)
{
// listView1.InsertionMark.Index = -1; // Is this really necessary?
}
private void listView1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
this.Text = "listView1_QueryContinueDrag";
}
private void listView1_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
this.Text = "listView1_GiveFeedback";
}
}
listView1.InsertionMark.Index = -1
非表示にするには手動で設定する必要がありInsertionMark
ますか?DragLeave
ドラッグドロップ効果がのときにイベントをトリガーする方法はありDragDropEffects.Link
ますか?