Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tooltip zur Laufzeit ändern

215 views
Skip to first unread message

Carsten Witte

unread,
Mar 13, 2008, 1:35:35 PM3/13/08
to
Hallo,

ich bin mir sehr wohl bewusst, dass ich Tooltips mit
ToolTip.SetToolTip(control, "Some text") setzen kann. Allerdings ist
so ein Tooltip nicht immer statisch, also moechte ich ihn zur Laufzeit
aendern. Und zwar nur dann, wenn er ohnehin angezeigt wird. Nicht on
MouseEnter, nicht on ModifyItem, nicht on Random(10).

Also dachte ich mir, okay, bei Menues machst Du Last-Minute-Changes
(z.B. enable/disable) auch in contextMenuStrip_Opening, also sollten
Last-Minute-Changes des Tooltips nach toolTipChart_Popup. Gesagt
getan, im Prinzip auch die richtige Stelle getroffen, nur leider kann
ich den Text nicht aendern. Ich kann sehr wohl die Ueberschrift
(ToolTip.ToolTipTitle) aendern, aber nicht den Text selber. Ein
erneuter Aufruf von ToolTip.SetToolTip fuehrt naturgemaess zur
Rekusion und StackOverflow.

Wo stehen entweder ich oder die Architektur mir da im Weg? Ich wollte
noch mit nativem TTM_[GET|SET]TOOLINFO auf e.AssociatedWindow.Handle
was werden, aber die SendMessage gibt immer false und Muell in
TOOLINFO.lpszText zurueck. Kann aber auch sein, dass meine
Interopfaehigkeiten daran schuld sind.

Hat da jemand ein paar nuetzliche Tips fuer mich? Ich akzeptiere gerne
auch den Vorschlag, einen Tooltip mit LPSTR_TEXTCALLBACK zu erzeugen,
wenn man mir sagt, die das Interop einer C#-Furnktion aussehen muss,
damit ich den Callback auf NMTTDISPINFO sauber beantworten kann...

Vielen Dank im Voraus...
Carsten

Thorsten Doerfler

unread,
Mar 13, 2008, 3:15:43 PM3/13/08
to
Carsten Witte schrieb:

> ich bin mir sehr wohl bewusst, dass ich Tooltips mit
> ToolTip.SetToolTip(control, "Some text") setzen kann. Allerdings ist
> so ein Tooltip nicht immer statisch, also moechte ich ihn zur Laufzeit
> aendern. Und zwar nur dann, wenn er ohnehin angezeigt wird. Nicht on
> MouseEnter, nicht on ModifyItem, nicht on Random(10).
>
> Also dachte ich mir, okay, bei Menues machst Du Last-Minute-Changes
> (z.B. enable/disable) auch in contextMenuStrip_Opening, also sollten
> Last-Minute-Changes des Tooltips nach toolTipChart_Popup. Gesagt
> getan, im Prinzip auch die richtige Stelle getroffen, nur leider kann
> ich den Text nicht aendern. Ich kann sehr wohl die Ueberschrift
> (ToolTip.ToolTipTitle) aendern, aber nicht den Text selber. Ein
> erneuter Aufruf von ToolTip.SetToolTip fuehrt naturgemaess zur
> Rekusion und StackOverflow.

Welche Stelle hast Du denn getroffen, dass es solche Auswirkungen hat?
Denn normal ist SetToolTip schon richtig, um den Tooltip zu aktualisieren.

Thorsten Dörfler
--
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Frank Dzaebel

unread,
Mar 13, 2008, 4:11:17 PM3/13/08
to
Hallo Carsten,

> Also dachte ich mir, okay, bei Menues machst Du Last-Minute-Changes
> (z.B. enable/disable) auch in contextMenuStrip_Opening, also sollten
> Last-Minute-Changes des Tooltips nach toolTipChart_Popup.

Warum nicht direkt im Opening?

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
deinToolStripMenuItem.ToolTipText = "Neuer Hinweis";
}


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Frank Dzaebel

unread,
Mar 13, 2008, 4:21:40 PM3/13/08
to
Hallo Thorsten,

>> Also dachte ich mir, okay, bei Menues machst Du Last-Minute-Changes
>> (z.B. enable/disable) auch in contextMenuStrip_Opening, also sollten
>

> [...] normal ist SetToolTip schon richtig, um den Tooltip zu
> aktualisieren.

Bei MenuItem's nicht, weil das keine Control's sind.

Thorsten Doerfler

unread,
Mar 13, 2008, 6:18:07 PM3/13/08
to
Hallo Frank,
Frank Dzaebel schrieb:

>>> Also dachte ich mir, okay, bei Menues machst Du Last-Minute-Changes
>>> (z.B. enable/disable) auch in contextMenuStrip_Opening, also sollten
>> [...] normal ist SetToolTip schon richtig, um den Tooltip zu
>> aktualisieren.
>
> Bei MenuItem's nicht, weil das keine Control's sind.

Da hab ich wohl zuviel überflogen. Bei MenuItem passt SetToolTip
natürlich nicht und muss zur Rekursion führen. Probiert hab ich
es nicht.

Carsten Witte

unread,
Mar 13, 2008, 6:33:36 PM3/13/08
to
On Mar 13, 9:11 pm, "Frank Dzaebel" <P...@FranksSeite.de> wrote:

> private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
> {
>    deinToolStripMenuItem.ToolTipText = "Neuer Hinweis";
>
> }

Okay, ich denke schon zu lange ueber das Problem nach, daher habe ich
mich wohl unglicklich ausgedureckt. Der Tooltip liegt auf einem
normalen Usercontrol. Das Gleichnis vom Menue habe ich nur
herangezogen, um zu erklaeren, /wann/ ich die Aenderung machen will.
Nicht immer mal, wenn mir danach ist, sondern dediziert, wenn das
Menu /oder/ der Tooltip angezeigt wird. Bei einem Menu geht es in
_Opening. Beim Tooltip hingegen geht es in _Popup nicht. Beides nur
Beispiele, kein Zusammenhang.

Ich will einfach unter C# (.NET 3.5) einen Tooltip zur Laufzeit
aktualisieren. Moeglichst in _Opening oder via Callback. Wenn ich
SetToolTip verwenden wuerde, muesste ich bei jeder Aenderung am Objekt
auch den Tooltip aktualisieren, egal ob er je angezeigt wird. Wenn ich
warte, bis das System rausgefunden hat, dass und wo der Tooltip /
wirklich/ gebracuht wird, will ich halt noch fix den Text
aktualisieren...

Frank Dzaebel

unread,
Mar 14, 2008, 2:38:33 AM3/14/08
to
Hallo Carsten,

> Nicht immer mal, wenn mir danach ist, sondern dediziert, wenn das
> Menu /oder/ der Tooltip angezeigt wird. Bei einem Menu geht es in
> _Opening.

richtig, bei Opening, so wie ich es gepostet
habe. Nicht im ToolTip.Popup-Ereignis, das
da ja gar nicht geworfen wird. Hier entscheidet
je nach AutoToolTip-Eigenschaft die ToolTipText-
Eigenschaft.

> Beim Tooltip hingegen geht es in _Popup nicht.
> Beides nur Beispiele, kein Zusammenhang.

Wenn es denn unbedingt im Popup sein soll,
(bei Nicht-MenuItem's, sondern Controls) nimm ggf.:

private void toolTip1_Popup(object sender, PopupEventArgs e)
{
ToolTip tt = (ToolTip)sender;
tt.Popup -= new PopupEventHandler(toolTip1_Popup);
tt.SetToolTip(e.AssociatedControl, "Neuer Hinweis für " +
e.AssociatedControl.Name);
tt.Popup += new PopupEventHandler(toolTip1_Popup);

0 new messages