Laden...

ToolTip erscheint nur kurz

Erstellt von Christel vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.961 Views
C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 14 Jahren
ToolTip erscheint nur kurz

Hallo,

ich habe einen ListView mit 2 Spalten (ID und Name).
Ich werte das ItemMouseHover-Event aus, indem ich den ToolTip für das ListView auf den Namen des Items (SubItem[1] setze. Durch Debuggen habe ich festgestellt, dass das Setzen funktioniert.

        
private void listViewDict_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
        {
            toolTipObjectDict.SetToolTip(listViewDict, e.Item.SubItems[1].Text);
        }

Leider erscheint der ToolTip nur sehr, sehr kurz, es ist eigentlich nur ein Flackern und man kann nichts lesen. Was läuft hier schief?

Danke, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

3.511 Beiträge seit 2005
vor 14 Jahren

Wieso nutzt du nicht die eingebauten ToolTip Funktionen innerhalb der ListView? Also ListViewItem.ToolTipText und ListView.ShowItemToolTips.

Ansonsten prüf mal die AutoPopDelay Eigenschaft des ToolTips. Vielleicht ist diese nur extrem gering eingestellt.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 14 Jahren

Danke, Khalid, für den Hinweis.
Leider hatte ich aber mit ListViewItem.ToolTipText und ListView.ShowItemToolTips = true noch keinen Erfolg. Ich vermute mal, dasss ich das ListView noch irgendwie mit meinem ToolTip Control verknüpfen muss. Aber wie?

Die AutoPopDelay ist groß genug.

Gruß, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

R
16 Beiträge seit 2009
vor 14 Jahren

Ich vermute mal, dasss ich das ListView noch irgendwie mit meinem ToolTip Control verknüpfen muss. Aber wie?

Hallo Christel,

eventuell hilft Dir ToolTip.Show() weiter?

Hier gibts du an für welches Control der Tooltip angezeigt werden soll.

Grüße
riddick

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 14 Jahren

Hallo riddick,

eventuell hilft Dir ToolTip.Show() weiter?
Hier gibts du an für welches Control der Tooltip angezeigt werden soll.

Ja, einen solchen Ansatz habe ich soeben auch in einem älteren Forumsbeitrag gefunden:


private void listViewDict_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
{
    ToolTip myTT = new ToolTip();
    myTT.Show(e.Item.SubItems[1].Text, listViewDict, 3000);
}

OK, der Tooltip wird dann auch angezeigt, verschwindet aber nicht wieder. Fahre ich mit der Maus über ein weiteres Item, kommt ein weiterer ToolTip dazu. Und in kurzer Zeit ist das ganze ListView mit ToolTips "vollgemüllt". Erst wenn ich mit der Maus den ListView-Bereich verlasse, hört der "Spuk" auf.

Gruß, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

K
62 Beiträge seit 2009
vor 14 Jahren

Benutz immer dasselbe Tooltip-Objekt und erstelle nicht für jeden Hover ein neues

ToolTip testTool = new ToolTip();

private void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
{
    testTool.Hide(listView1);
    testTool.Show(e.Item.Text, listView1, 3000);
}

Dann sollte es wie erwartet funktionieren.

5.299 Beiträge seit 2008
vor 14 Jahren

(ein im Designer zugefügter ToolTip würde auch korrekt disposed)

Der frühe Apfel fängt den Wurm.

R
16 Beiträge seit 2009
vor 14 Jahren

bzw mit SetToolTip kannst Du die Controls zuweisen die darauf reagieren sollen. Dann sollte das gewünscht Verhalten entstehen.

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 14 Jahren

Danke Euch allen,

Benutz immer dasselbe Tooltip-Objekt und erstelle nicht für jeden Hover ein neues

Das hatte ich probiert. Dann kommt allerdings gar kein Tooltip mehr.

(ein im Designer zugefügter ToolTip würde auch korrekt disposed)

Ja, deshalb war das ja auch mein original-Ansatz. Allerdings erscheint in diesem Falle ja der Tooltip nur so kurz. Deshalb ja der Thread.

bzw mit SetToolTip kannst Du die Controls zuweisen die darauf reagieren sollen. Dann sollte das gewünscht Verhalten entstehen.

In diesem Fall ist der Tooltip dauerhaft da, flackert aber ununterbrochen.

Also, irgendwie krieg ich's nicht hin.
Es kann doch wohl nicht so schwer sein, so nen ToolTip anzuzeigen :evil:

Am besten gefällt mir ja der Ansatz, die eingebauten ToolTip Funktionen innerhalb der ListView zu benutzen. Aber auch das funzt bei mir leider nicht 😭

Gruß, Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.

3.511 Beiträge seit 2005
vor 14 Jahren

Hallo,

kleines Beispiel: Gegeben ist ein Form mit einem Button und einer ListView. Die ListView hat die Einstellungen:

  • View = Details
  • FullRowSelect = true

Plus zwie einfache Columns.

Der Code für den Button ist:


private void button1_Click(object sender, EventArgs e)
{
  listView1.ShowItemToolTips = true;

  listView1.Items.Clear();
  for (int i = 0; i < 10; i++)
  {
    ListViewItem lvi = new ListViewItem();
    lvi.Text = "Eintrag " + i.ToString();
    lvi.SubItems.Add("Subeintrag " + i.ToString()); 
    lvi.ToolTipText = "Dies ist mein ToolTip für Eintrag " + i.ToString();

    listView1.Items.Add(lvi);
  }
}

Danach sollten die ToolTips angezeigt werden.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

C
Christel Themenstarter:in
448 Beiträge seit 2007
vor 14 Jahren

Hallo,
kann es etwa damit zusammenhängen, dass es sich um ein ListView im VirtualMode handelt? Ich habe allerdings nirgendwo gelesen, dass sich ItemToolTips und VirtualMode ausschließen.

Die Zuordnung der ToolTips erfolgt momentan im RetrieveVirtualItem Eventhandler der ListView. Im ItemMouseHover Eventhandler wird zusätzlich nochmal ShowItemToolTip auf true gesetzt.

Wie gesagt: in diesem fall der Implementatione rscheint GAR KEIN ToolTip. Die ToolTipText Property der ListViewItems ist zum Zeitpunkt des ItemMouseHover Events korrekt gesetzt (im Debugger geprüft).

Christel

Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.