2016-04-29 12 views
4

私はDragDrop機能を持つListViewを持っています。 DragDropの後に、ドラッグしたアイテムを選択したままにしておきたい。DragDropイベント中にListView内のフォーカスされたアイテムを変更する方法は?

私は

private void commandListView_DragDrop(object sender, DragEventArgs e) 
{ 
    Point point = commandListView.PointToClient(new Point(e.X, e.Y)); 
    int index = 0; 

    try 
    { 
     index = commandListView.GetItemAt(point.X, point.Y).Index; 
    } 
    catch (Exception) 
    { 
    } 

    if (index < 0) 
    { 
     index = commandListView.Items.Count - 1; 
    } 

    ListViewItem data = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; 
    commandListView.Items.Remove(data); 
    commandListView.Items.Insert(index, data); 
} 

(ドラッグアンドドロップのために)このコードを持っていると私は再びアイテムを選択するには、この本を使用しようとしましたが、それは私がどうかを確認するためにテストさ

その後
data.Selected = true; 
data.Focused = true; 

仕事doesntの私リストビューの最初の項目にフォーカスすることができます

commandListView.Items[0].Selected = true; 
commandListView.Items[0].Focused = true; 

ハンゲドラッグされたアイテムがドラッグドロップの前にあった古いインデックスです。

PS。私はWinFormsの

@Update

を使用しています私はすでに

commandListView.Focus(); 

を使用しようとしましたが、それはただのDragDropが同じListViewコントロールの内部で何が起こっている明確にする

を働いていたdidntの、私アイテムをドラッグして順序を変更しています。

+0

サイドノート: 'catch(Exception){} '(スローされたすべての例外を無視する)は決して使用しないでください。 –

+0

私はおそらくこれがあなたを助けることができます:http://stackoverflow.com/questions/11745028/set-item-focus-in-listview-wpf – Snelfie

+0

'commandListView.Focus();'フォーカス項目の後にコントロール自体をフォーカスする必要があります。 –

答えて

1

解決策が見つかりました。 MouseDownイベントを使用してDragDrop操作を開始していました。

ここでItemDragイベントを使用していますが、すべて正常に動作しますが、実際には項目をフォーカスする必要はなく、自動的に行われます。

関連する問題