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.
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)
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.
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
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.
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.
(ein im Designer zugefügter ToolTip würde auch korrekt disposed)
Der frühe Apfel fängt den Wurm.
bzw mit SetToolTip kannst Du die Controls zuweisen die darauf reagieren sollen. Dann sollte das gewünscht Verhalten entstehen.
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.
Hallo,
kleines Beispiel: Gegeben ist ein Form mit einem Button und einer ListView. Die ListView hat die Einstellungen:
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)
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.