[ VB.NET / C# ] ListView フォーカスが外れても選択状態を視認できるようにする

Pocket

ここでは、ListView に関する以下のサンプルコードを掲載しています。

  • ListView のフォーカスが外れても選択状態を視認できるようにする
  • ユーザー操作である MouseHover にあわせてアイテムの背景色を変更する
スポンサーリンク

ListView フォーカスが外れても選択状態を視認できるようにする

デフォルトのリストビューでは、ListView からフォーカスが外れてしまうと選択状態がわからなくなります。 フォーカスが外れている状態でも選択状態を可視化させるためには、HideSelection プロパティを False に設定します。もちろん、デザイナ上で変更することもできます。

VB.NET

ListView1.HideSelection = False

C#

ListView1.HideSelection = false;

これで、フォーカスされていない状態でも選択状態がわかるようになりました。しかし、個人差もあるとは思いますが、非常に色が薄い気がします。 照明や環境にもよると思いますが、とにかく薄くて見えにくいです。まして、タブで切り替えながら使用するようなインターフェースである場合はなおさら見にくいです(これは実体験です)。そこで、タブの切り替えからの復帰に、フォーカスをリストビューにあてることで、選択状態をはっきりさせるサンプルコードを掲載しておきます。フォーカスが当たっていることが一番です。なお、サンプル中の TabControl.SelectedIndexChanged イベントはタブ切り替え時に発生するイベントです。

ListView にフォーカスを当てる

C#

    private void TabControl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // 選択されたタブによって
        // それぞれのリストビューにフォーカスを充てる
        switch (TabControl1.SelectedIndex)
        {
            case 0:
                ListView1.Focus();
                break;
            case 1:
                ListView2.Focus();
                break;
				
            (以下、省略)
        }
    }
マウスに合わせてアイテムの背景色を変更する

現在のマウスの位置にあるアイテムの背景色を変更するサンプルコードです。具体的には、ListView.ItemMouseHover イベント内で背景色を変更しています。なお、ListView.View プロパティは Detail を、ListView.FullRowSelect には True を設定しています。

VB.NET

Private Sub ListView1_ItemMouseHover(ByVal sender As System.Object, _
                                     ByVal e As System.Windows.Forms.ListViewItemMouseHoverEventArgs) _
                                     Handles ListView1.ItemMouseHover
    ' すべての項目の背景色を白にする
    For Each item As ListViewItem In ListView1.Items
        item.BackColor = Color.White
    Next
    
    ' 現在のマウス位置にある項目の背景色をピンクにする
    e.Item.BackColor = Color.Pink

End Sub

C#

private void listView1_ItemMouseHover(object sender, 
                                      ListViewItemMouseHoverEventArgs e)
{
    // すべての項目の背景色を白にする
    foreach(ListViewItem item in listView1.Items) 
    {
        item.BackColor = Color.White;
    }

    // 現在のマウス位置にある項目の背景色をピンクにする
    e.Item.BackColor = Color.Pink;
}

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *