Zeile eines dataGridViews als Tooltip darstellen

Sparks

Mitglied
Hallo zusammen,

ich möchte den Inhalt der Zeile eines dataGridViews als Tooltip darstellen (da nicht alle Spalten gleichzeitig sichtbar sind).
Die Spalteninhalte dabei untereinander geschrieben:

C#:
		private void fg1_MouseMove(object sender, MouseEventArgs e)
		{
			HitTestInfo hti = fg1.HitTest(e.X, e.Y);
			int nRow = hti.Row;
			int nCol = hti.Column;
			sTip = "";
			toolTipInfo_tbl.ToolTipText = "";

			if (nRow > 0 && nCol == 2)	// nur wenn Maus über Spalte 2
			{
				if (fg1[nRow, nCol] == null)
				{
					sTip = "Diese Zeile ist leer :-)";
				}
				else
				{
					for (int i = 1; i < 25; i++)
					{
						sTip += fg1[nRow, i].ToString() + "\r\n";
					}
				}
			}
		}
Im Event fg1_MouseHover( ...) wird der Tooltip dann angezeigt.
Das funktioniert auch so wie gedacht.

Aber: Der Tooltip soll nun jeweils aktualisiert werden, wenn ich mit der Maus von Zeile zu Zeile gehe.
Derzeit bleibt der Tooltip entweder unverändert, oder er verschwindet und kommt erst dann wieder, wenn die Maus zwischenzeitlich das dataGridView verlassen hatte.
Das Setzen der AutoPopDelay-Eigenschaft auf 0 bringt (natürlich) auch nicht den gewünschten Effekt.

Gruß,
Sparks
 
Hallo allerseits,

inzwischen bekam ich den hilfreichen Tipp, es im Event CellToolTipTextNeeded abzuarbeiten.

Leider kennt mein 'FlexGridView' (nicht das Standard-dataGridView) diesen Event seltsamerweise gar nicht :(, aber das hat mich auf die Idee gebracht, es komplett im Event MouseMove zu versuchen.

Es ist zwar längst nicht so elegant wie per 'CellTooltipTextNeeded', aber es funktioniert einwandfrei.
Für die, die es interessiert poste ich hier die Lösung (live wird das natürlich in eine Methode gepackt, exception-handling usw. ...)
C#:
		private void fg1_MouseMove(object sender, MouseEventArgs e)
		{
			HitTestInfo hti = fg1.HitTest(e.X, e.Y);
			nTTRow = hti.Row;
			nTTCol = hti.Column;

			// wenn sich Zeile geändert hat usw.
			if (nTTRow != nTTRowAlt && nTTRow > 0 && nTTCol == 2)
			{
				// Zeile merken
				nTTRowAlt = nTTRow;
				// Text zurücksetzen 
				sTTText = "";
				// in jedem Fall zurücksetzen
				TTInfo_fg1.ToolTipText = "";
				// Tooltip-Anzeige abschalten (nächste zwei Zeilen erforderlich):
				TTInfo_fg1.Enabled = DefaultableBoolean.False;
				TTManager.HideToolTip();
				// Text für Tooltip zusammensetzen:
				for (int i = 1; i < 5; i++)
				{
					if (fg1[nTTRow, i] != null)
					{
						sTTText += fg1[nTTRow, i].ToString() + "\r\n";
					}
				}
				// wenn Zeile nicht komplett leer, TT anzeigen:
				if (sTTText != "")
				{
					TTInfo_fg1.ToolTipText = sTTText;
					// Tooltip-Anzeige aktivieren (nächste zwei Zeilen erforderlich):
					TTInfo_fg1.Enabled = DefaultableBoolean.True;
					TTManager.ShowToolTip(fg1);
				}
			}
		}

Im oberen Screenshot befindet sich die Maus über der ersten Zeile, im unteren über der zweiten Zeile -- OHNE die Tabelle vorher verlassen zu haben...

Gruß,
Sparks
 

Anhänge

  • tooltip.jpg
    tooltip.jpg
    32,7 KB · Aufrufe: 34
Zurück