21 Stimmen

Anzeige eines Tooltips bei Mausverschiebung eines Textes

Ich möchte einen Tooltip anzeigen, wenn die Maus über einen Link in meinem benutzerdefinierten Rich-Edit-Steuerelement schwebt. Betrachten Sie den folgenden Text:

Wir alle schlafen in der Nacht.

In meinem Fall ist das Wort schlafen ist ein Link.

Wenn der Benutzer die Maus unter den Link, in diesem Fall "sleep", bewegt, möchte ich einen Tooltip für den Link anzeigen.

Mir fielen folgende Möglichkeiten ein, aber sie funktionieren nicht

1) Überfüllen von OnMouseHover

if(this.Cursor == Cursors.Hand)
   tooltip.Show(textbox,"My tooltip");
else
   tooltip.Hide(textbox);

Aber das klappt nicht.

UPDATE

Die genannten Links sind no URLs, d.h. es handelt sich um benutzerdefinierte Links, so dass Regex hier keine große Hilfe sein wird, es kann ein beliebiger Text sein. Der Benutzer kann wählen, ob er einen Link erstellen möchte.

Ich habe zwar nicht versucht GetPosition Ich glaube nicht, dass es in Bezug auf Design und Wartung so elegant wäre.

Ich habe zum Beispiel folgende Zeile in meiner Richedit-Box

Wir schlafen bei Nacht. Aber die Fledermäuse bleiben wach . Kakerlaken werden aktiv in der Nacht.

In dem obigen Satz möchte ich drei verschiedene Tooltips haben, wenn die Maus über sie fährt.

sleep -> Human beings
awake -> Nightwatchman here
active -> My day begins

I gefangen OnMouseMove wie folgt:

Arbeiten mit Messagebox

OnMouseMove( )
{

   // check to see if the cursor is over a link
   // though this is not the correct approach, I am worried why does not a tooltip show up
   if(this.Cursor.current == Cursors.hand )
   {
     Messagebox.show("you are under a link");
   }
}

Funktioniert nicht - mit Tooltip - Tooltip wird nicht angezeigt

OnMouseMove( MouseventArgs e )
{

   if(cursor.current == cursors.hand )
   {
     tooltip.show(richeditbox,e.x,e.y,1000);
   }
}

0 Stimmen

So hat es geklappt .. tooltip.Active = true

1 Stimmen

Oh, mir war nicht klar, dass Ihr Problem der Tooltip selbst ist... Wie auch immer, verwenden Sie System.Windows.Forms.Cursor.Current, um statisch den aktuellen Mauszeiger zu erhalten, wie in meiner letzten Antwort.

0voto

Shujaat Abdi Punkte 444

Ich möchte auch etwas hier hinzufügen, dass, wenn Sie gewünschte Form, die Tooltip-Steuerung enthalten, bevor das Programm ausgeführt wird, dann Tooltip-Steuerung auf dieser Form wird nicht funktionieren, wie unten beschrieben...

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        objfrmmain = new Frm_Main();
        Showtop();//this is procedure in program.cs to load an other form, so if that contain's tool tip control then it will not work
        Application.Run(objfrmmain);

    }

Ich habe dieses Problem gelöst, indem ich folgenden Code in die Fram_main_load-Ereignisprozedur eingefügt habe

    private void Frm_Main_Load(object sender, EventArgs e)
    {
        Program.Showtop();
    }

0voto

S G Punkte 511

Wenn Sie das RichTextBox-Steuerelement verwenden. Sie können einfach das ToolTip-Objekt definieren und die QuickInfo anzeigen, wenn der Text durch Bewegen der Maus innerhalb des RichTextBox-Steuerelements ausgewählt wird.

    ToolTip m_ttInput = new ToolTip(); // define as member variable

    private void rtbInput_SelectionChanged(object sender, EventArgs e)
    {
        if (rtbInput.SelectedText.Length > 0) 
        {
            m_ttInput.Show(rtbInput.SelectedText.Length.ToString(), rtbInput, 1000);
        }
    }

0voto

RugerSR9 Punkte 448

Aus Gründen der Benutzerfreundlichkeit und Verständlichkeit.

Sie können einfach einen Tooltip an einer beliebigen Stelle Ihres Formulars einfügen (aus der Toolbox). Sie erhalten dann eine Option in den Eigenschaften von allem anderen in Ihrem Formular, um zu bestimmen, was in diesem Tooltip angezeigt wird (sie lautet etwa "ToolTip auf toolTip1"). Jedes Mal, wenn Sie den Mauszeiger über ein Objekt bewegen, wird der Text in dieser Eigenschaft als QuickInfo angezeigt.

Este nicht decken benutzerdefinierte On-the-fly-Tooltips ab, wie sie in der ursprünglichen Frage gefordert werden. Aber ich lasse dies hier für andere, die nicht brauchen

-1voto

Jesse Chisholm Punkte 3589

Da es in dieser Frage nichts gibt (außer ihrem Alter), was eine Lösung in Windows.Forms Hier ist ein Weg, dies zu tun in WPF in Code-Behind.

TextBlock tb = new TextBlock();
tb.Inlines.Add(new Run("Background indicates packet repeat status:"));
tb.Inlines.Add(new LineBreak());
tb.Inlines.Add(new LineBreak());
Run r = new Run("White");
r.Background = Brushes.White;
r.ToolTip = "This word has a White background";
tb.Inlines.Add(r);
tb.Inlines.Add(new Run("\t= Identical Packet received at this time."));
tb.Inlines.Add(new LineBreak());
r = new Run("SkyBlue");
r.ToolTip = "This word has a SkyBlue background";
r.Background = new SolidColorBrush(Colors.SkyBlue);
tb.Inlines.Add(r);
tb.Inlines.Add(new Run("\t= Original Packet received at this time."));

myControl.Content = tb;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X