ListView.InsertionMark 속성
- 참조
정의
ListView 컨트롤 안에서 항목을 끌 때 예상되는 놓을 위치를 나타내는 데 사용되는 개체를 가져옵니다.
[System.ComponentModel.Browsable(false)]
public System.Windows.Forms.ListViewInsertionMark InsertionMark { get; }
속성 값
삽입 표시를 나타내는 ListViewInsertionMark 개체입니다.
특성
예제
다음 코드 예제에서는 삽입 표시 기능을 사용 ListView 하는 방법을 보여 줍니다. 이 예제에서는 표준 끌기 이벤트를 사용하여 끌어서 놓기 항목 다시 정렬을 구현합니다. 삽입 표시의 위치에 대 한 처리기에서 업데이트 되는 Control.DragOver 이벤트입니다. 이 처리기에서 가장 가까운 항목의 중간점 마우스 포인터의 위치를 비교 하 고 결과 삽입 표시가 항목의 오른쪽 또는 왼쪽에 표시 되는지 여부를 확인 하려면 사용 됩니다.
using System;
using System.Drawing;
using System.Windows.Forms;
public class ListViewInsertionMarkExample : Form
{
private ListView myListView;
public ListViewInsertionMarkExample()
{
// Initialize myListView.
myListView = new ListView();
myListView.Dock = DockStyle.Fill;
myListView.View = View.LargeIcon;
myListView.MultiSelect = false;
myListView.ListViewItemSorter = new ListViewIndexComparer();
// Initialize the insertion mark.
myListView.InsertionMark.Color = Color.Green;
// Add items to myListView.
myListView.Items.Add("zero");
myListView.Items.Add("one");
myListView.Items.Add("two");
myListView.Items.Add("three");
myListView.Items.Add("four");
myListView.Items.Add("five");
// Initialize the drag-and-drop operation when running
// under Windows XP or a later operating system.
if (OSFeature.Feature.IsPresent(OSFeature.Themes))
{
myListView.AllowDrop = true;
myListView.ItemDrag += new ItemDragEventHandler(myListView_ItemDrag);
myListView.DragEnter += new DragEventHandler(myListView_DragEnter);
myListView.DragOver += new DragEventHandler(myListView_DragOver);
myListView.DragLeave += new EventHandler(myListView_DragLeave);
myListView.DragDrop += new DragEventHandler(myListView_DragDrop);
}
// Initialize the form.
this.Text = "ListView Insertion Mark Example";
this.Controls.Add(myListView);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new ListViewInsertionMarkExample());
}
// Starts the drag-and-drop operation when an item is dragged.
private void myListView_ItemDrag(object sender, ItemDragEventArgs e)
{
myListView.DoDragDrop(e.Item, DragDropEffects.Move);
}
// Sets the target drop effect.
private void myListView_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
// Moves the insertion mark as the item is dragged.
private void myListView_DragOver(object sender, DragEventArgs e)
{
// Retrieve the client coordinates of the mouse pointer.
Point targetPoint =
myListView.PointToClient(new Point(e.X, e.Y));
// Retrieve the index of the item closest to the mouse pointer.
int targetIndex = myListView.InsertionMark.NearestIndex(targetPoint);
// Confirm that the mouse pointer is not over the dragged item.
if (targetIndex > -1)
{
// Determine whether the mouse pointer is to the left or
// the right of the midpoint of the closest item and set
// the InsertionMark.AppearsAfterItem property accordingly.
Rectangle itemBounds = myListView.GetItemRect(targetIndex);
if ( targetPoint.X > itemBounds.Left + (itemBounds.Width / 2) )
{
myListView.InsertionMark.AppearsAfterItem = true;
}
else
{
myListView.InsertionMark.AppearsAfterItem = false;
}
}
// Set the location of the insertion mark. If the mouse is
// over the dragged item, the targetIndex value is -1 and
// the insertion mark disappears.
myListView.InsertionMark.Index = targetIndex;
}
// Removes the insertion mark when the mouse leaves the control.
private void myListView_DragLeave(object sender, EventArgs e)
{
myListView.InsertionMark.Index = -1;
}
// Moves the item to the location of the insertion mark.
private void myListView_DragDrop(object sender, DragEventArgs e)
{
// Retrieve the index of the insertion mark;
int targetIndex = myListView.InsertionMark.Index;
// If the insertion mark is not visible, exit the method.
if (targetIndex == -1)
{
return;
}
// If the insertion mark is to the right of the item with
// the corresponding index, increment the target index.
if (myListView.InsertionMark.AppearsAfterItem)
{
targetIndex++;
}
// Retrieve the dragged item.
ListViewItem draggedItem =
(ListViewItem)e.Data.GetData(typeof(ListViewItem));
// Insert a copy of the dragged item at the target index.
// A copy must be inserted before the original item is removed
// to preserve item index values.
myListView.Items.Insert(
targetIndex, (ListViewItem)draggedItem.Clone());
// Remove the original copy of the dragged item.
myListView.Items.Remove(draggedItem);
}
// Sorts ListViewItem objects by index.
private class ListViewIndexComparer : System.Collections.IComparer
{
public int Compare(object x, object y)
{
return ((ListViewItem)x).Index - ((ListViewItem)y).Index;
}
}
}
설명
ListView 삽입 표시 기능을 사용하면 항목을 새 위치로 끌 때 끌어서 놓기 작업에서 예상되는 놓기 위치를 시각적으로 나타낼 수 있습니다. 이 기능은 경우에만 작동 합니다 AutoArrange 속성이로 설정 되어 true 및 시기를 ListView 컨트롤 항목을 자동으로 정렬 되지 않습니다. 자동 정렬 방지 하기 위해 합니다 Sorting 속성으로 설정 되어 있어야 SortOrder.None 및 View 속성 설정 해야 합니다 View.LargeIcon, View.SmallIcon, 또는 View.Tile합니다. 또한 그룹화 기능이 그룹 멤버 자격별로 항목을 정렬하므로 그룹화 기능과 함께 ListView 삽입 표시 기능이 표시되지 않을 수 있습니다.
ListViewInsertionMark 클래스에 대 한 처리기에서 일반적으로 사용 됩니다 합니다 Control.DragOver 또는 Control.MouseMove 이벤트 항목을 끄는 대로 삽입 표시의 위치를 업데이트 합니다. 에 대 한 처리기에서 사용 되는 합니다 Control.DragDrop 또는 Control.MouseUp 끌어 온된 항목을 올바른 위치에 삽입 하는 이벤트입니다. 자세한 내용은 참조 ListViewInsertionMark 및 방법: Windows Forms ListView 컨트롤에 삽입 표시를 표시 합니다.
참고
삽입 표시 기능은 Windows XP 및 Windows Server 2003에만 사용할 수 있는 애플리케이션 호출을 Application.EnableVisualStyles 메서드. 이전 버전의 운영 체제에서는 삽입 표시와 관련된 코드가 아무 효과도 없으며 삽입 표시가 나타나지 않습니다. 따라서 삽입 표시 기능에 의존하는 코드가 제대로 작동하지 않을 수 있습니다. 이 기능을 사용할 수 있는지 여부를 결정하는 코드를 포함하고 사용할 수 없는 경우 대체 기능을 제공할 수 있습니다. 예를 들어 삽입 표시를 지원하지 않는 운영 체제에서 실행할 때 끌어서 놓기 항목 위치를 구현하는 모든 코드를 무시할 수 있습니다.
삽입 표시 기능은 운영 체제 테마 기능을 제공 하는 라이브러리에서 제공 됩니다. 이 라이브러리의 가용성을 확인 하려면 호출을 FeatureSupport.IsPresent(Object) 메서드 오버 로드 하 고 전달 합니다 OSFeature.Themes 값입니다.
적용 대상
2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 |
3.0, 3.1, 5, 6, 7 Preview 7 |
추가 정보
출처 :
https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.listview.insertionmark?view=windowsdesktop-6.0
'개발언어 > C#' 카테고리의 다른 글
[C#] 파일경로에서 확장자, 파일명, 경로 추출하는 함수와 예제 (0) | 2022.08.30 |
---|---|
[C#] List 사용법 정리 (0) | 2022.08.24 |
[C#] listview 예제 (0) | 2022.08.23 |
[C#] ListView 내에서 드래그 앤 드롭을 통한 시각적 지원 (0) | 2022.08.23 |
[C#] 리스트뷰(listView)에서 원하는 항목의 인덱스(순서)를 바꾸는 방법 (0) | 2022.08.22 |