.NET Framework 2.0からは、ListViewのShowItemToolTipsプロパティをTrueにして、ListViewItemのToolTipTextプロパティにそのアイテムに表示したい文字列を設定することにより、可能です。
以下の例では、リストビューコントロールListView1に新しいListViewItemを追加し、ツールヒントを設定しています。
'アイテムごとにツールヒントが表示されるようにする ListView1.ShowItemToolTips = True Dim lvi As New ListViewItem("日本語") 'アイテムのツールヒントを設定する lvi.ToolTipText = "こんにちは。" ListView1.Items.Add(lvi)
//アイテムごとにツールヒントが表示されるようにする ListView1.ShowItemToolTips = true; ListViewItem lvi = new ListViewItem("日本語"); //アイテムのツールヒントを設定する lvi.ToolTipText = "こんにちは。"; ListView1.Items.Add(lvi);
注意:この方法は、VB.NET 2005以降で、アプリケーションの設定の「XP Visualスタイルを有効にする」が無効になっている時は、正常に機能しません。C#でも.NET Framework 2.0以降では、Application.EnableVisualStylesメソッドを呼び出さなければ、やはりうまくいきません。
エクスプローラには「フォルダとデスクトップの項目の説明をポップアップで表示する」というオプションがあり、これを有効にすると、フォルダやファイル上にマウスポインタが来たとき、ToolTipが表示されます。これと同じことをListViewで行う方法を紹介します。
基本的な考え方としては、ListViewのMouseMoveイベントハンドラでポイントされているアイテムを調べ、そのアイテムに合ったテキストをToolTipに設定しなおすということをします。
次の例では、リストビューコントロールListView1のイベントハンドラがListView1_MouseMoveであり、さらにツールチップコントロールToolTip1がフォームに追加されているものとして、ListView1内のアイテムがポイントされるとToolTipでアイテムの名前が表示されるようにしています。
'マウスポインタのあるアイテムを記憶する 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
//マウスポインタのあるアイテムを記憶する 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; } } }