DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ListViewのアイテムごとにToolTipを表示する

.NET Framework 2.0以降

.NET Framework 2.0からは、ListViewのShowItemToolTipsプロパティをTrueにして、ListViewItemのToolTipTextプロパティにそのアイテムに表示したい文字列を設定することにより、可能です。

以下の例では、リストビューコントロールListView1に新しいListViewItemを追加し、ツールヒントを設定しています。

VB.NET
コードを隠すコードを選択
'アイテムごとにツールヒントが表示されるようにする
ListView1.ShowItemToolTips = True

Dim lvi As New ListViewItem("日本語")
'アイテムのツールヒントを設定する
lvi.ToolTipText = "こんにちは。"

ListView1.Items.Add(lvi)
C#
コードを隠すコードを選択
//アイテムごとにツールヒントが表示されるようにする
ListView1.ShowItemToolTips = true;

ListViewItem lvi = new ListViewItem("日本語");
//アイテムのツールヒントを設定する
lvi.ToolTipText = "こんにちは。";

ListView1.Items.Add(lvi);

.NET Framework 1.1以前

注意:この方法は、VB.NET 2005以降で、アプリケーションの設定の「XP Visualスタイルを有効にする」が無効になっている時は、正常に機能しません。C#でも.NET Framework 2.0以降では、Application.EnableVisualStylesメソッドを呼び出さなければ、やはりうまくいきません。

エクスプローラには「フォルダとデスクトップの項目の説明をポップアップで表示する」というオプションがあり、これを有効にすると、フォルダやファイル上にマウスポインタが来たとき、ToolTipが表示されます。これと同じことをListViewで行う方法を紹介します。

基本的な考え方としては、ListViewのMouseMoveイベントハンドラでポイントされているアイテムを調べ、そのアイテムに合ったテキストをToolTipに設定しなおすということをします。

次の例では、リストビューコントロールListView1のイベントハンドラがListView1_MouseMoveであり、さらにツールチップコントロールToolTip1がフォームに追加されているものとして、ListView1内のアイテムがポイントされるとToolTipでアイテムの名前が表示されるようにしています。

VB.NET
コードを隠すコードを選択
'マウスポインタのあるアイテムを記憶する
Private lastListViewItem As ListViewItem = Nothing

'ListView1のMouseMoveイベントハンドラ
Private Sub ListView1_MouseMove(ByVal sender As Object, _
        ByVal e As MouseEventArgs)
    If Not (ToolTip1 Is Nothing) Then
        Dim lv As ListView = CType(sender, ListView)
        'マウスポインタのあるアイテムを取得
        Dim lvi As ListViewItem = lv.GetItemAt(e.X, e.Y)
        'ポイントされているアイテムが変わった時
        If Not lvi Is lastListViewItem Then
            'アクティブを解除
            If ToolTip1.Active Then
                ToolTip1.Active = False
            End If
            If Not (lvi Is Nothing) Then
                'ToolTipのテキストを設定しなおす
                ToolTip1.SetToolTip(lv, lvi.Text)
                'ToolTipを再びアクティブにする
                ToolTip1.Active = True
            End If
            'ポイントされているアイテムを記憶する
            lastListViewItem = lvi
        End If
    End If
End Sub
C#
コードを隠すコードを選択
//マウスポインタのあるアイテムを記憶する
private ListViewItem lastListViewItem = null;

//ListView1のMouseMoveイベントハンドラ
private void ListView1_MouseMove(object sender, MouseEventArgs e)
{
    if(ToolTip1 != null)
     {
        ListView lv = (ListView) sender;
        //マウスポインタのあるアイテムを取得
        ListViewItem lvi = lv.GetItemAt(e.X, e.Y);
        //ポイントされているアイテムが変わった時
        if (lvi != lastListViewItem)
        {
            //アクティブを解除
            if(ToolTip1.Active)
                ToolTip1.Active = false;

            if (lvi != null)
            {
                //ToolTipのテキストを設定しなおす
                ToolTip1.SetToolTip(lv, lvi.Text);
                //ToolTipを再びアクティブにする
                ToolTip1.Active = true;
            }
            //ポイントされているアイテムを記憶する
             lastListViewItem = lvi;
        }
     }
}
  • 履歴:
  • 2007/12/14 .NET Framework 2.0に関する情報を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。