2011-01-06 16 views
0

ListBoxでどの項目が「アウトライン」されているかをどのように変更しますか?明確化のため、以下のスクリーンショットを参照してください:選択を変更せずにListBoxでどの項目が「アウトライン」されているかを変更するにはどうすればよいですか?

Screenshot demonstrating what I mean by “outlined” item as opposed to “selected” item

背景:私は正常に動作し、標準の複数選択リストボックスを持っていると思います。残念ながら、Windows Forms ListBox(SelectionMode.MultiExtended)は完全に機能していません。欠落している機能は、Ctrl +矢印キーとCtrl + Spaceを使用して、項目の分離セットを選択できないことです。 (Windowsエクスプローラで、どのように動作するのか見てみてください)ListBoxをサブクラス化し、この欠落している機能を追加しようとしています。この目的のために、私はOnKeyDownプロテクトメソッドのCtrl +矢印キーに応答するつもりですが、そうするためには、選択したアイテムのセットを変更せずにアウトラインを移動できる必要があります。それ、どうやったら出来るの?

答えて

2

リストボックスにLB_SETCARETINDEXメッセージを送信することにより、これを行うことができます。

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
public static extern uint SendMessage(IntPtr hWnd, uint msg, uint wParam, uint lParam); 

public const uint LB_SETCARETINDEX = 0x019E; 
public const uint LB_GETCARETINDEX = 0x019F; 

[...] 

public int OutlineIndex 
{ 
    get 
    { 
     return (int) WinAPI.SendMessage(Handle, WinAPI.LB_GETCARETINDEX, 0, 0); 
    } 
    set 
    { 
     if (value < 0 || value >= Items.Count) 
      throw new ArgumentException("OutlineIndex cannot be negative or greater than the size of the collection.", "value"); 
     WinAPI.SendMessage(Handle, WinAPI.LB_SETCARETINDEX, (uint) value, 0); 

    } 
} 
+0

これが正解です!ありがとうございました! – Timwi

+0

Blimey、私はすべてのコードを入力して覚えていません... –

+0

私はあなたのためにそれを記入しています:) – Timwi

関連する問題