2009-06-25 11 views
3

基本的に私はユーザーがキーを押すと、マウスカーソルの下の項目を探したいという機能を実装しようとしています。リストビューコントロールでマウスカーソルの下に項目を取得しますか?

私はMouseイベントを使用せず、ListViewItemを私に与えないキーボードイベントを使用します。

マウスの位置を取得してコントロールのスペースに変換する必要がある領域がわかりません。

アイデア?

+0

この[devX記事](http://www.devx.com/vb2themax/Tip/18831)では、あなたが探していることについて語っています。 –

答えて

13

はあなたが興味のあるどのリストビューコントロールがわかっている場合は、以下の方法でトリックを行います:マウスの位置に依存

private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition) 
{ 
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView 
    Point localPoint = listView.PointToClient(mousePosition); 
    return listView.GetItemAt(localPoint.X, localPoint.Y); 
} 

// call it like this: 
ListViewItem item = GetItemFromPoint(myListView, Cursor.Position); 
+0

フレッドリックさん、ありがとう、私は今日これを試してみます。 –

+2

マウスイベントハンドラの内部でこれを行う場合は注意してください。 MouseDoubleClick、MouseEventArgs.Locationは既にクライアントに相対的なので、PointToClient()を呼びたくない場合 – dlchambers

0

キーボード操作が少し異例に聞こえます。キーボード操作は通常、前のキーボード操作で選択されたか、またはその項目の前のマウスクリックによって、画面上で強調表示され/フォーカスされ/選択された項目に影響を与えるはずです。

「唯一の」(混乱している)ユーザーのやりとりを覚えておいてください。

+0

人を気にしないでください。自分でこの機能を追加して、自分自身の開発を容易にします。それは最終版になるつもりはありません:) –