ListView.InsertionMark プロパティ
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)

挿入マークを表す ListViewInsertionMark オブジェクト。

ListView 挿入マーク機能を使用すると、ドラッグ アンド ドロップ操作で項目を新しい位置までドラッグしたときに、ドロップの予定位置を視覚的に示すことができます。この機能は、AutoArrange プロパティが true に設定され、ListView コントロールによって項目が自動的に並べ替えられない場合にのみ有効です。自動並べ替えが実行されないようにするには、Sorting プロパティを SortOrder.None に設定し、View プロパティを View.LargeIcon, View.SmallIcon またはView.Tile に設定する必要があります。さらに、挿入マーク機能は ListView グループ化機能と同時に使用できません。グループ化機能では、項目がグループのメンバシップに従って並べられるためです。
一般的に、Control.DragOver イベントまたは Control.MouseMove イベントのハンドラで ListViewInsertionMark クラスを使用して、項目がドラッグされているときに挿入マークの位置を更新します。これは、ドラッグしている項目を適切な位置に挿入するために Control.DragDrop イベントまたは Control.MouseUp イベントのハンドラでも使用されます。詳細については、「方法 : Windows フォーム ListView コントロールに挿入マークを表示する」を参照してください。
挿入マーク機能は、Windows XP および Windows Server 2003 でアプリケーションから Application.EnableVisualStyles メソッドを呼び出す場合にのみ使用できます。旧バージョンのオペレーティング システムでは、挿入マークに関するコードがすべて無効になり、挿入マークは表示されません。その結果、挿入マーク機能に依存するコードが正常に機能しない可能性があります。
この機能が使用できるかどうかを確認し、使用できない場合は代替機能を提供するコードを用意します。たとえば、挿入マークをサポートしないオペレーティング システムで実行する場合には、ドラッグ アンド ドロップによる項目の再配置を実装するコードをすべてバイパスできます。
挿入マーク機能は、オペレーティング システムのテーマ機能を提供しているライブラリと同じライブラリによって提供されます。このライブラリが使用できるかどうかを確認するには、FeatureSupport.IsPresent(Object) メソッド オーバーロードを呼び出し、OSFeature.Themes 値を渡します。

ListView の挿入マーク機能の使用方法を次のコード例に示します。この例では、標準のドラッグ イベントを使用して、ドラッグ アンド ドロップによる項目の並べ替えを実装しています。挿入マークの位置は、Control.DragOver イベントのハンドラで更新されます。このハンドラでは、マウス ポインタの位置を、最も近くにある項目の中心と比較し、その結果を使用して、挿入マークを項目の右に表示するか、左に表示するかを決定しています。
Imports System Imports System.Drawing Imports System.Windows.Forms Public Class ListViewInsertionMarkExample Inherits Form Private myListView As ListView Public Sub New() ' 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 AddHandler myListView.ItemDrag, AddressOf myListView_ItemDrag AddHandler myListView.DragEnter, AddressOf myListView_DragEnter AddHandler myListView.DragOver, AddressOf myListView_DragOver AddHandler myListView.DragLeave, AddressOf myListView_DragLeave AddHandler myListView.DragDrop, AddressOf myListView_DragDrop End If ' Initialize the form. Me.Text = "ListView Insertion Mark Example" Me.Controls.Add(myListView) End Sub 'New <STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New ListViewInsertionMarkExample()) End Sub 'Main ' Starts the drag-and-drop operation when an item is dragged. Private Sub myListView_ItemDrag(sender As Object, e As ItemDragEventArgs) myListView.DoDragDrop(e.Item, DragDropEffects.Move) End Sub 'myListView_ItemDrag ' Sets the target drop effect. Private Sub myListView_DragEnter(sender As Object, e As DragEventArgs) e.Effect = e.AllowedEffect End Sub 'myListView_DragEnter ' Moves the insertion mark as the item is dragged. Private Sub myListView_DragOver(sender As Object, e As DragEventArgs) ' Retrieve the client coordinates of the mouse pointer. Dim targetPoint As Point = myListView.PointToClient(New Point(e.X, e.Y)) ' Retrieve the index of the item closest to the mouse pointer. Dim targetIndex As Integer = _ myListView.InsertionMark.NearestIndex(targetPoint) ' Confirm that the mouse pointer is not over the dragged item. If targetIndex > -1 Then ' 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. Dim itemBounds As Rectangle = myListView.GetItemRect(targetIndex) If targetPoint.X > itemBounds.Left + (itemBounds.Width / 2) Then myListView.InsertionMark.AppearsAfterItem = True Else myListView.InsertionMark.AppearsAfterItem = False End If End If ' 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 End Sub 'myListView_DragOver ' Removes the insertion mark when the mouse leaves the control. Private Sub myListView_DragLeave(sender As Object, e As EventArgs) myListView.InsertionMark.Index = -1 End Sub 'myListView_DragLeave ' Moves the item to the location of the insertion mark. Private Sub myListView_DragDrop(sender As Object, e As DragEventArgs) ' Retrieve the index of the insertion mark; Dim targetIndex As Integer = myListView.InsertionMark.Index ' If the insertion mark is not visible, exit the method. If targetIndex = -1 Then Return End If ' If the insertion mark is to the right of the item with ' the corresponding index, increment the target index. If myListView.InsertionMark.AppearsAfterItem Then targetIndex += 1 End If ' Retrieve the dragged item. Dim draggedItem As ListViewItem = _ CType(e.Data.GetData(GetType(ListViewItem)), 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, _ CType(draggedItem.Clone(), ListViewItem)) ' Remove the original copy of the dragged item. myListView.Items.Remove(draggedItem) End Sub 'myListView_DragDrop ' Sorts ListViewItem objects by index. Private Class ListViewIndexComparer Implements System.Collections.IComparer Public Function Compare(x As Object, y As Object) As Integer _ Implements System.Collections.IComparer.Compare Return CType(x, ListViewItem).Index - CType(y, ListViewItem).Index End Function 'Compare End Class 'ListViewIndexComparer End Class 'ListViewInsertionMarkExample
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; } } }
#using <System.dll> #using <System.Windows.Forms.dll> #using <System.Drawing.dll> using namespace System; using namespace System::Drawing; using namespace System::Windows::Forms; public ref class ListViewInsertionMarkExample: public Form { private: ListView^ myListView; public: ListViewInsertionMarkExample() { // Initialize myListView. myListView = gcnew ListView; myListView->Dock = DockStyle::Fill; myListView->View = View::LargeIcon; myListView->MultiSelect = false; myListView->ListViewItemSorter = gcnew 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 ( System::Environment::OSVersion->Version->Major > 5 || (System::Environment::OSVersion->Version->Major == 5 && System::Environment::OSVersion->Version->Minor >= 1) ) { myListView->AllowDrop = true; myListView->ItemDrag += gcnew ItemDragEventHandler( this, &ListViewInsertionMarkExample::myListView_ItemDrag ); myListView->DragEnter += gcnew DragEventHandler( this, &ListViewInsertionMarkExample::myListView_DragEnter ); myListView->DragOver += gcnew DragEventHandler( this, &ListViewInsertionMarkExample::myListView_DragOver ); myListView->DragLeave += gcnew EventHandler( this, &ListViewInsertionMarkExample::myListView_DragLeave ); myListView->DragDrop += gcnew DragEventHandler( this, &ListViewInsertionMarkExample::myListView_DragDrop ); } // Initialize the form. this->Text = "ListView Insertion Mark Example"; this->Controls->Add( myListView ); } private: // Starts the drag-and-drop operation when an item is dragged. void myListView_ItemDrag( Object^ /*sender*/, ItemDragEventArgs^ e ) { myListView->DoDragDrop( e->Item, DragDropEffects::Move ); } // Sets the target drop effect. void myListView_DragEnter( Object^ /*sender*/, DragEventArgs^ e ) { e->Effect = e->AllowedEffect; } // Moves the insertion mark as the item is dragged. void myListView_DragOver( Object^ /*sender*/, DragEventArgs^ e ) { // Retrieve the client coordinates of the mouse pointer. Point targetPoint = myListView->PointToClient( 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. void myListView_DragLeave( Object^ /*sender*/, EventArgs^ /*e*/ ) { myListView->InsertionMark->Index = -1; } // Moves the item to the location of the insertion mark. 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 = dynamic_cast<ListViewItem^>(e->Data->GetData( ListViewItem::typeid )); // 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, dynamic_cast<ListViewItem^>(draggedItem->Clone()) ); // Remove the original copy of the dragged item. myListView->Items->Remove( draggedItem ); } // Sorts ListViewItem objects by index. ref class ListViewIndexComparer: public System::Collections::IComparer { public: virtual int Compare( Object^ x, Object^ y ) { return (dynamic_cast<ListViewItem^>(x))->Index - (dynamic_cast<ListViewItem^>(y))->Index; } }; }; [STAThread] int main() { Application::EnableVisualStyles(); Application::Run( gcnew ListViewInsertionMarkExample ); }
import System.*; import System.Drawing.*; import System.Windows.Forms.*; public class ListViewInsertionMarkExample extends Form { private ListView myListView; public ListViewInsertionMarkExample() { // Initialize myListView. myListView = new ListView(); myListView.set_Dock(DockStyle.Fill); myListView.set_View(View.LargeIcon); myListView.set_MultiSelect(false); myListView.set_ListViewItemSorter(new ListViewIndexComparer()); // Initialize the insertion mark. myListView.get_InsertionMark().set_Color(Color.get_Green()); // Add items to myListView. myListView.get_Items().Add("zero"); myListView.get_Items().Add("one"); myListView.get_Items().Add("two"); myListView.get_Items().Add("three"); myListView.get_Items().Add("four"); myListView.get_Items().Add("five"); // Initialize the drag-and-drop operation when running // under Windows XP or a later operating system. if (System.Environment.get_OSVersion().get_Version().get_Major() > 5 || (System.Environment.get_OSVersion().get_Version().get_Major() == 5 && System.Environment.get_OSVersion().get_Version(). get_Minor() >= 1)) { myListView.set_AllowDrop(true); myListView.add_ItemDrag(new ItemDragEventHandler( myListView_ItemDrag)); myListView.add_DragEnter(new DragEventHandler( myListView_DragEnter)); myListView.add_DragOver(new DragEventHandler(myListView_DragOver)); myListView.add_DragLeave(new EventHandler(myListView_DragLeave)); myListView.add_DragDrop(new DragEventHandler(myListView_DragDrop)); } // Initialize the form. this.set_Text("ListView Insertion Mark Example"); this.get_Controls().Add(myListView); } //ListViewInsertionMarkExample /** @attribute STAThread() */ public static void main(String[] args) { Application.Run(new ListViewInsertionMarkExample()); } //main // Starts the drag-and-drop operation when an item is dragged. private void myListView_ItemDrag(Object sender, ItemDragEventArgs e) { myListView.DoDragDrop(e.get_Item(), DragDropEffects.Move); } //myListView_ItemDrag // Sets the target drop effect. private void myListView_DragEnter(Object sender, DragEventArgs e) { e.set_Effect(e.get_AllowedEffect()); } //myListView_DragEnter // 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.get_X(), e.get_Y())); // Retrieve the index of the item closest to the mouse pointer. int targetIndex = myListView.get_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.get_X() > itemBounds.get_Left() + itemBounds.get_Width() / 2) { myListView.get_InsertionMark().set_AppearsAfterItem(true); } else { myListView.get_InsertionMark().set_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.get_InsertionMark().set_Index(targetIndex); } //myListView_DragOver // Removes the insertion mark when the mouse leaves the control. private void myListView_DragLeave(Object sender, EventArgs e) { myListView.get_InsertionMark().set_Index(-1); } //myListView_DragLeave // 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.get_InsertionMark().get_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.get_InsertionMark().get_AppearsAfterItem()) { targetIndex++; } // Retrieve the dragged item. ListViewItem draggedItem = (ListViewItem)(e.get_Data().GetData( ListViewItem.class.ToType())); // 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.get_Items().Insert(targetIndex, (ListViewItem) draggedItem.Clone()); // Remove the original copy of the dragged item. myListView.get_Items().Remove(draggedItem); } //myListView_DragDrop // Sorts ListViewItem objects by index. private class ListViewIndexComparer implements System.Collections.IComparer { public int Compare(Object x, Object y) { return ((ListViewItem)x).get_Index() - ((ListViewItem)y).get_Index(); } //Compare } //ListViewIndexComparer } //ListViewInsertionMarkExample

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ListView クラス
ListView メンバ
System.Windows.Forms 名前空間
ListViewInsertionMark
Application.EnableVisualStyles
ListViewInsertionMark クラス
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)


ListView コントロールの InsertionMark プロパティから取得できる ListViewInsertionMark を使用すると、ドラッグ アンド ドロップ操作で項目を新しい位置までドラッグしたときに、ドロップの予定位置を視覚的に示すことができます。
この機能は、ListView.AutoArrange プロパティが true に設定され、ListView コントロールによって項目が自動的に並べ替えられない場合にのみ有効です。自動並べ替えが実行されないようにするには、ListView.Sorting プロパティを SortOrder.None に設定し、ListView.View プロパティを View.LargeIcon, View.SmallIcon またはView.Tile に設定する必要があります。さらに、挿入マーク機能は ListView グループ化機能と同時に使用できません。グループ化機能では、項目がグループのメンバシップに従って並べられるためです。
一般的に、Control.DragOver イベントまたは Control.MouseMove イベントのハンドラで ListViewInsertionMark クラスを使用して、項目がドラッグされているときに挿入マークの位置を更新します。これは、ドラッグしている項目を適切な位置に挿入するために Control.DragDrop イベントまたは Control.MouseUp イベントのハンドラでも使用されます。
Control.DragOver イベント ハンドラまたは Control.MouseMove イベント ハンドラでは、通常
-
Control.DragOver イベントまたは Control.MouseMove イベントのハンドラで、ListView.InsertionMark プロパティを使用して ListView コントロールに関連付けられている ListViewInsertionMark オブジェクトにアクセスします。
-
外接する四角形の中心点から左側にマウス ポインタが置かれている場合、AppearsAfterItem プロパティを false に設定します。それ以外の場合、true に設定します。
-
Index プロパティに、NearestIndex メソッドから取得したインデックス値を設定します。AppearsAfterItem プロパティの値に応じて、指定されたインデックスを持つ項目の左側または右側に挿入マークが表示されます。項目をその項目自体の上にドラッグすると、インデックスは -1 となり、挿入マークが非表示になります。
ドラッグしている項目を正しい位置に挿入するには、次の手順を実行します。
-
Control.DragDrop イベントまたは Control.MouseUp イベントのハンドラで、Index プロパティを使用して挿入マークの現在位置を判断します。この値は、後で挿入インデックスとして使用するために格納しておきます。
-
AppearsAfterItem プロパティが true に設定されている場合、格納されている挿入インデックスの値が増分されます。
-
ListView.ListViewItemCollection.Insert メソッドを使用して、ListView.Items コレクションの格納されている挿入インデックスの位置に、ドラッグしている項目の複製を挿入します。
-
ListView.ListViewItemCollection.Remove メソッドを使用して、ドラッグしている項目のドラッグ元を削除します。
挿入の前に ListView.Items コレクションのインデックス値が変更されないように、ドラッグしている項目の複製を挿入した後でドラッグ元を削除する必要があります。
Color プロパティを使用すると、挿入マークの色を変更できます。挿入マークのサイズや位置を知る必要がある場合には、Bounds プロパティを使って外接する四角形を取得できます。
![]() |
---|
挿入マークの機能は、Windows XP および Windows Server 2003 ファミリでアプリケーションから Application.EnableVisualStyles メソッドを呼び出す場合にのみ使用できます。旧バージョンのオペレーティング システムでは、挿入マークに関するコードがすべて無視され、挿入マークは表示されません。その結果、挿入マーク機能に依存するコードが正常に機能しない可能性があります。挿入マーク機能が使用できるかどうかを確認し、使用できない場合は代替機能を提供するテスト機能を用意します。たとえば、挿入マークをサポートしないオペレーティング システムで実行する場合には、ドラッグ アンド ドロップによる項目の再配置を実装するコードをすべてバイパスできます。 挿入マーク機能は、オペレーティング システムのテーマ機能を提供しているライブラリと同じライブラリによって提供されます。このライブラリが使用できるかどうかを確認するには、FeatureSupport.IsPresent(Object) メソッド オーバーロードを呼び出し、OSFeature.Themes 値を渡します。 |

ListView の挿入マーク機能を使用し、標準のドラッグ イベントを使ったドラッグ アンド ドロップ項目の並べ替えを実装する方法を次のコード例に示します。挿入マークの位置は、Control.DragOver イベントのハンドラで更新されます。このハンドラでは、マウス ポインタの位置を、最も近くにある項目の中心と比較し、その結果を使用して、挿入マークを項目の右に表示するか、左に表示するかを決定しています。
Imports System Imports System.Drawing Imports System.Windows.Forms Public Class ListViewInsertionMarkExample Inherits Form Private myListView As ListView Public Sub New() ' 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 AddHandler myListView.ItemDrag, AddressOf myListView_ItemDrag AddHandler myListView.DragEnter, AddressOf myListView_DragEnter AddHandler myListView.DragOver, AddressOf myListView_DragOver AddHandler myListView.DragLeave, AddressOf myListView_DragLeave AddHandler myListView.DragDrop, AddressOf myListView_DragDrop End If ' Initialize the form. Me.Text = "ListView Insertion Mark Example" Me.Controls.Add(myListView) End Sub 'New <STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New ListViewInsertionMarkExample()) End Sub 'Main ' Starts the drag-and-drop operation when an item is dragged. Private Sub myListView_ItemDrag(sender As Object, e As ItemDragEventArgs) myListView.DoDragDrop(e.Item, DragDropEffects.Move) End Sub 'myListView_ItemDrag ' Sets the target drop effect. Private Sub myListView_DragEnter(sender As Object, e As DragEventArgs) e.Effect = e.AllowedEffect End Sub 'myListView_DragEnter ' Moves the insertion mark as the item is dragged. Private Sub myListView_DragOver(sender As Object, e As DragEventArgs) ' Retrieve the client coordinates of the mouse pointer. Dim targetPoint As Point = myListView.PointToClient(New Point(e.X, e.Y)) ' Retrieve the index of the item closest to the mouse pointer. Dim targetIndex As Integer = _ myListView.InsertionMark.NearestIndex(targetPoint) ' Confirm that the mouse pointer is not over the dragged item. If targetIndex > -1 Then ' 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. Dim itemBounds As Rectangle = myListView.GetItemRect(targetIndex) If targetPoint.X > itemBounds.Left + (itemBounds.Width / 2) Then myListView.InsertionMark.AppearsAfterItem = True Else myListView.InsertionMark.AppearsAfterItem = False End If End If ' 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 End Sub 'myListView_DragOver ' Removes the insertion mark when the mouse leaves the control. Private Sub myListView_DragLeave(sender As Object, e As EventArgs) myListView.InsertionMark.Index = -1 End Sub 'myListView_DragLeave ' Moves the item to the location of the insertion mark. Private Sub myListView_DragDrop(sender As Object, e As DragEventArgs) ' Retrieve the index of the insertion mark; Dim targetIndex As Integer = myListView.InsertionMark.Index ' If the insertion mark is not visible, exit the method. If targetIndex = -1 Then Return End If ' If the insertion mark is to the right of the item with ' the corresponding index, increment the target index. If myListView.InsertionMark.AppearsAfterItem Then targetIndex += 1 End If ' Retrieve the dragged item. Dim draggedItem As ListViewItem = _ CType(e.Data.GetData(GetType(ListViewItem)), 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, _ CType(draggedItem.Clone(), ListViewItem)) ' Remove the original copy of the dragged item. myListView.Items.Remove(draggedItem) End Sub 'myListView_DragDrop ' Sorts ListViewItem objects by index. Private Class ListViewIndexComparer Implements System.Collections.IComparer Public Function Compare(x As Object, y As Object) As Integer _ Implements System.Collections.IComparer.Compare Return CType(x, ListViewItem).Index - CType(y, ListViewItem).Index End Function 'Compare End Class 'ListViewIndexComparer End Class 'ListViewInsertionMarkExample
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; } } }
#using <System.dll> #using <System.Windows.Forms.dll> #using <System.Drawing.dll> using namespace System; using namespace System::Drawing; using namespace System::Windows::Forms; public ref class ListViewInsertionMarkExample: public Form { private: ListView^ myListView; public: ListViewInsertionMarkExample() { // Initialize myListView. myListView = gcnew ListView; myListView->Dock = DockStyle::Fill; myListView->View = View::LargeIcon; myListView->MultiSelect = false; myListView->ListViewItemSorter = gcnew 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 ( System::Environment::OSVersion->Version->Major > 5 || (System::Environment::OSVersion->Version->Major == 5 && System::Environment::OSVersion->Version->Minor >= 1) ) { myListView->AllowDrop = true; myListView->ItemDrag += gcnew ItemDragEventHandler( this, &ListViewInsertionMarkExample::myListView_ItemDrag ); myListView->DragEnter += gcnew DragEventHandler( this, &ListViewInsertionMarkExample::myListView_DragEnter ); myListView->DragOver += gcnew DragEventHandler( this, &ListViewInsertionMarkExample::myListView_DragOver ); myListView->DragLeave += gcnew EventHandler( this, &ListViewInsertionMarkExample::myListView_DragLeave ); myListView->DragDrop += gcnew DragEventHandler( this, &ListViewInsertionMarkExample::myListView_DragDrop ); } // Initialize the form. this->Text = "ListView Insertion Mark Example"; this->Controls->Add( myListView ); } private: // Starts the drag-and-drop operation when an item is dragged. void myListView_ItemDrag( Object^ /*sender*/, ItemDragEventArgs^ e ) { myListView->DoDragDrop( e->Item, DragDropEffects::Move ); } // Sets the target drop effect. void myListView_DragEnter( Object^ /*sender*/, DragEventArgs^ e ) { e->Effect = e->AllowedEffect; } // Moves the insertion mark as the item is dragged. void myListView_DragOver( Object^ /*sender*/, DragEventArgs^ e ) { // Retrieve the client coordinates of the mouse pointer. Point targetPoint = myListView->PointToClient( 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. void myListView_DragLeave( Object^ /*sender*/, EventArgs^ /*e*/ ) { myListView->InsertionMark->Index = -1; } // Moves the item to the location of the insertion mark. 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 = dynamic_cast<ListViewItem^>(e->Data->GetData( ListViewItem::typeid )); // 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, dynamic_cast<ListViewItem^>(draggedItem->Clone()) ); // Remove the original copy of the dragged item. myListView->Items->Remove( draggedItem ); } // Sorts ListViewItem objects by index. ref class ListViewIndexComparer: public System::Collections::IComparer { public: virtual int Compare( Object^ x, Object^ y ) { return (dynamic_cast<ListViewItem^>(x))->Index - (dynamic_cast<ListViewItem^>(y))->Index; } }; }; [STAThread] int main() { Application::EnableVisualStyles(); Application::Run( gcnew ListViewInsertionMarkExample ); }
import System.*; import System.Drawing.*; import System.Windows.Forms.*; public class ListViewInsertionMarkExample extends Form { private ListView myListView; public ListViewInsertionMarkExample() { // Initialize myListView. myListView = new ListView(); myListView.set_Dock(DockStyle.Fill); myListView.set_View(View.LargeIcon); myListView.set_MultiSelect(false); myListView.set_ListViewItemSorter(new ListViewIndexComparer()); // Initialize the insertion mark. myListView.get_InsertionMark().set_Color(Color.get_Green()); // Add items to myListView. myListView.get_Items().Add("zero"); myListView.get_Items().Add("one"); myListView.get_Items().Add("two"); myListView.get_Items().Add("three"); myListView.get_Items().Add("four"); myListView.get_Items().Add("five"); // Initialize the drag-and-drop operation when running // under Windows XP or a later operating system. if (System.Environment.get_OSVersion().get_Version().get_Major() > 5 || (System.Environment.get_OSVersion().get_Version().get_Major() == 5 && System.Environment.get_OSVersion().get_Version(). get_Minor() >= 1)) { myListView.set_AllowDrop(true); myListView.add_ItemDrag(new ItemDragEventHandler( myListView_ItemDrag)); myListView.add_DragEnter(new DragEventHandler( myListView_DragEnter)); myListView.add_DragOver(new DragEventHandler(myListView_DragOver)); myListView.add_DragLeave(new EventHandler(myListView_DragLeave)); myListView.add_DragDrop(new DragEventHandler(myListView_DragDrop)); } // Initialize the form. this.set_Text("ListView Insertion Mark Example"); this.get_Controls().Add(myListView); } //ListViewInsertionMarkExample /** @attribute STAThread() */ public static void main(String[] args) { Application.Run(new ListViewInsertionMarkExample()); } //main // Starts the drag-and-drop operation when an item is dragged. private void myListView_ItemDrag(Object sender, ItemDragEventArgs e) { myListView.DoDragDrop(e.get_Item(), DragDropEffects.Move); } //myListView_ItemDrag // Sets the target drop effect. private void myListView_DragEnter(Object sender, DragEventArgs e) { e.set_Effect(e.get_AllowedEffect()); } //myListView_DragEnter // 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.get_X(), e.get_Y())); // Retrieve the index of the item closest to the mouse pointer. int targetIndex = myListView.get_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.get_X() > itemBounds.get_Left() + itemBounds.get_Width() / 2) { myListView.get_InsertionMark().set_AppearsAfterItem(true); } else { myListView.get_InsertionMark().set_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.get_InsertionMark().set_Index(targetIndex); } //myListView_DragOver // Removes the insertion mark when the mouse leaves the control. private void myListView_DragLeave(Object sender, EventArgs e) { myListView.get_InsertionMark().set_Index(-1); } //myListView_DragLeave // 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.get_InsertionMark().get_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.get_InsertionMark().get_AppearsAfterItem()) { targetIndex++; } // Retrieve the dragged item. ListViewItem draggedItem = (ListViewItem)(e.get_Data().GetData( ListViewItem.class.ToType())); // 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.get_Items().Insert(targetIndex, (ListViewItem) draggedItem.Clone()); // Remove the original copy of the dragged item. myListView.get_Items().Remove(draggedItem); } //myListView_DragDrop // Sorts ListViewItem objects by index. private class ListViewIndexComparer implements System.Collections.IComparer { public int Compare(Object x, Object y) { return ((ListViewItem)x).get_Index() - ((ListViewItem)y).get_Index(); } //Compare } //ListViewIndexComparer } //ListViewInsertionMarkExample

System.Windows.Forms.ListViewInsertionMark


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ListViewInsertionMark プロパティ

名前 | 説明 | |
---|---|---|
![]() | AppearsAfterItem | Index プロパティによって指定されたインデックスを持つ項目の右側に挿入マークを表示するかどうかを示す値を取得または設定します。 |
![]() | Bounds | 挿入マークに外接する四角形を取得します。 |
![]() | Color | 挿入マークの色を取得または設定します。 |
![]() | Index | 挿入マークが表示される位置の横にある項目のインデックスを取得または設定します。 |

ListViewInsertionMark メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | NearestIndex | 指定した位置に最も近い項目のインデックスを取得します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

ListViewInsertionMark メンバ
ListView コントロールで項目を新しい位置にドラッグしたときに、ドロップの予定位置を示すために使用されます。この機能は、Windows XP 以降のみで使用できます。
ListViewInsertionMark データ型で公開されるメンバを以下の表に示します。

名前 | 説明 | |
---|---|---|
![]() | AppearsAfterItem | Index プロパティによって指定されたインデックスを持つ項目の右側に挿入マークを表示するかどうかを示す値を取得または設定します。 |
![]() | Bounds | 挿入マークに外接する四角形を取得します。 |
![]() | Color | 挿入マークの色を取得または設定します。 |
![]() | Index | 挿入マークが表示される位置の横にある項目のインデックスを取得または設定します。 |

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | NearestIndex | 指定した位置に最も近い項目のインデックスを取得します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

Weblioに収録されているすべての辞書からListView.InsertionMarkを検索する場合は、下記のリンクをクリックしてください。

- ListView.InsertionMarkのページへのリンク