2012-10-25 8 views
5

Mam kontroli ListView w widoku szczegółów, jak to (pogląd, który pokazuje listę postaci siatki)Jak ustawić podpowiedź dla ListviewSubItem

mListView.View = View.Details; 
    mListView.mLVSelectedObject.ShowItemToolTips = true; 

    ListViewItem listViewItem = mListView.Items.Add(lValue.Name); 
    listViewItem.ToolTipText = "AAAAAAAAAAAAAAAAA"; 

Problem jest, że etykietka pokazuje tylko, gdy kursory jest nad kolumną pierwszego listview, ale nie dla pozostałych. Chciałbym się dowiedzieć, czy jest coś, co sprawi, że pojawi się "łatwo"?

+1

Czy próbujesz dodać etykietkę narzędzi do całego widoku list, czy też chcesz mieć inną etykietkę narzędzi dla każdego elementu? – Joe

+0

Chcę uzyskać jedną etykietkę narzędzi dla każdego wiersza. (Ta sama podpowiedź dla każdego podelementu listviewitem). – Osk

Odpowiedz

6

Po kilku badaniach. Rozwiązałem ten problem w ten sposób, ale wciąż zastanawiam się, czy jest inny sposób na uniknięcie EventHandlers;

ToolTip  mTooltip; 
    Point mLastPos = new Point(-1, -1); 

    private void listview_MouseMove(object sender, MouseEventArgs e) 
    { 
     ListViewHitTestInfo info = mLV.HitTest(e.X, e.Y); 

     if (mTooltip == null) 
      mTooltip = new ToolTip(); 

     if (mLastPos != e.Location) 
     { 
      if (info.Item != null && info.SubItem != null) 
      { 
       mTooltip.ToolTipTitle = info.Item.Text; 
       mTooltip.Show(info.SubItem.Text, info.Item.ListView, e.X, e.Y, 20000); 
      } 
      else 
      { 
       mTooltip.SetToolTip(mLV, string.Empty); 
      } 
     } 

     mLastPos = e.Location; 
    } 
+0

Dlaczego nie obsługujesz MouseHover zamiast MouseMove ?, poza tym masz właściwość "ShowItemToolTips", po prostu ustaw ją na true i wszystko jest w porządku. –

+1

@ user1803300: Naprawdę trudno używać tej funkcji w 'MouseHover'. Pierwszy problem, w którym nie masz współrzędnych, musisz obsłużyć wiele innych zdarzeń i są również nieoczekiwane błędy. Kiedy otrzymam kod (i nie będzie to normalna długość), opublikuję go tutaj. – Julo