DragDropIndicatorManagerを使用してUltraGridの行ドラッグ時にマウスカーソル付近にドラッグ中の行のUIを表示する方法をご紹介します。
UltraGridで行のドラッグを行う場合はイベントをいくつかハンドリングしますが、ドラッグ中に行のUIを表示する場合はまずUltraGridのSelectionDragイベントでDragDropIndicatorManagerインスタンスを生成し、InitializeDragIndicator()メソッドを実行します。この時、メソッドの引数に表示するUI要素を指定しておきます。ShowDragIndicator()メソッドを実行すると、指定した位置にUI要素を表示することができます。
ここでは表示するUI要素としてUltraGridの選択中の行UIElementの配列を指定しています。また、表示位置は現在のマウス位置としています。
DragDropIndicatorManager ind; .... private void ultraGrid1_SelectionDrag(object sender, CancelEventArgs e) { //DragDropIndicatorManagerを作成する ind = new DragDropIndicatorManager(Orientation.Horizontal, null); List<UIElement> elements = new List<UIElement>(); foreach (UltraGridRow row in ultraGrid1.Selected.Rows) { elements.Add(row.GetUIElement()); } ind.InitializeDragIndicator(elements.ToArray()); ind.DragIndicatorOffset = new Point(-50, 0); ind.ShowDragIndicator(System.Windows.Forms.Control.MousePosition); //UltraGridのドラッグを開始する ultraGrid1.DoDragDrop(ultraGrid1.Selected.Rows, DragDropEffects.Move); }
また、画像をドラッグ中のマウスに追随させるため、UltraGridのDragOverイベントでShowDragIndicator()を現在のマウス位置で実行します。
private void ultraGrid1_DragOver(object sender, DragEventArgs e) { ..... //ドラッグ処理 .... if (ind != null) { //マウスに合わせてDragDropIndicatorManagerを移動させる ind.ShowDragIndicator(System.Windows.Forms.Control.MousePosition); } }
最後に、UltraGridのDragDropイベントでDragDropIndicatorManagerのHideDragIndicator()メソッドを実行し、画像を非表示とします。
private void ultraGrid1_DragDrop(object sender, DragEventArgs e) { ..... //ドロップ処理 .... //DragDropIndicatorManagerを非表示とする ind.HideDragIndicator(); }