una texto sobre power por pasar mostrar informacion imagen dar boton c# .net winforms tooltip richtextbox

c# - power - Mostrar información sobre herramientas al pasar el mouse sobre un texto



mostrar texto al pasar el mouse sobre una imagen html (9)

Quiero mostrar información sobre herramientas cuando el mouse se desplaza sobre un enlace en mi control de edición enriquecido personalizado. Considere el siguiente texto:

Todos dormimos por la noche.

En mi caso la palabra dormir es un enlace.

Cuando el usuario mueve el mouse debajo del enlace, en este caso "dormir", quiero mostrar una información sobre herramientas para el enlace.

Lo siguiente vino a mi mente, pero no están funcionando

1) Atrapando OnMouseHover

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

Pero esto no funciona.

ACTUALIZAR

Los enlaces mencionados no son URL, es decir, son enlaces personalizados, por lo que Regex no será de mucha ayuda aquí, puede ser cualquier texto. El usuario puede optar por crearlo a un enlace.

Aunque no he probado el método GetPosition , no creo que sea tan elegante en términos de diseño y mantenimiento.

Déjame decirte que tengo la siguiente línea, en mi caja de richedit

Dormimos en la noche Pero los murciélagos permanecen despiertos . Las cucarachas se activan por la noche.

En la oración anterior, quiero tres información sobre herramientas diferentes, cuando el mouse se cierne sobre ellas.

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

OnMouseMove siguiente manera:

Trabajando con 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"); } }

No funciona - con información sobre herramientas - La información sobre herramientas no se muestra

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


Bueno, eche un vistazo, esto funciona, si tiene problemas, por favor dígame:

using System.Drawing; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } ToolTip tip = new ToolTip(); void richTextBox1_MouseMove(object sender, MouseEventArgs e) { if (!timer1.Enabled) { string link = GetWord(richTextBox1.Text, richTextBox1.GetCharIndexFromPosition(e.Location)); //Checks whether the current word i a URL, change the regex to whatever you want, I found it on www.regexlib.com. //you could also check if current word is bold, underlined etc. but I didn''t dig into it. if (System.Text.RegularExpressions.Regex.IsMatch(link, @"^(http|https|ftp)/://[a-zA-Z0-9/-/.]+/.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9/-/._/?/,/'////+&amp;%/$#/=~])*$")) { tip.ToolTipTitle = link; Point p = richTextBox1.Location; tip.Show(link, this, p.X + e.X, p.Y + e.Y + 32, //You can change it (the 35) to the tooltip''s height - controls the tooltips position. 1000); timer1.Enabled = true; } } } private void timer1_Tick(object sender, EventArgs e) //The timer is to control the tooltip, it shouldn''t redraw on each mouse move. { timer1.Enabled = false; } public static string GetWord(string input, int position) //Extracts the whole word the mouse is currently focused on. { char s = input[position]; int sp1 = 0, sp2 = input.Length; for (int i = position; i > 0; i--) { char ch = input[i]; if (ch == '' '' || ch == ''/n'') { sp1 = i; break; } } for (int i = position; i < input.Length; i++) { char ch = input[i]; if (ch == '' '' || ch == ''/n'') { sp2 = i; break; } } return input.Substring(sp1, sp2 - sp1).Replace("/n", ""); } } }


Como no hay nada en esta pregunta (pero su edad) que requiera una solución en Windows.Forms , aquí hay una manera de hacer esto en WPF en el código subyacente.

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;


En aras de la facilidad de uso y comprensión.

Simplemente puede poner una Información sobre herramientas en cualquier lugar del formulario (desde la caja de herramientas). A continuación, se le darán opciones en las Propiedades de todo lo demás en su formulario para determinar qué se muestra en esa Información sobre herramientas (se lee algo como "Información sobre herramientas en Información sobre herramientas1"). Cada vez que se desplaza sobre un objeto, el texto de esa propiedad se mostrará como información sobre herramientas.

Esto no cubre información sobre herramientas personalizada sobre la marcha como la pregunta original está pidiendo. Pero lo dejo aquí para otros que no necesitan.


Esto no es elegante, pero es posible que pueda usar el método RichTextBox.GetCharIndexFromPosition para devolverle el índice del carácter sobre el que se encuentra actualmente el mouse, y luego usar ese índice para averiguar si se trata de un enlace, hotspot o Cualquier otra área especial. Si es así, muestra tu información sobre herramientas (y probablemente querrás pasar las coordenadas del mouse al método Mostrar de la información sobre herramientas, en lugar de solo pasar el cuadro de texto, de modo que la información sobre herramientas se pueda colocar al lado del enlace).

Ejemplo aquí: http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.getcharindexfromposition(VS.80).aspx


No debe utilizar la información sobre herramientas de control privado , sino la forma uno . Este ejemplo funciona bien:

public partial class Form1 : Form { private System.Windows.Forms.ToolTip toolTip1; public Form1() { InitializeComponent(); this.components = new System.ComponentModel.Container(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); MyRitchTextBox myRTB = new MyRitchTextBox(); this.Controls.Add(myRTB); myRTB.Location = new Point(10, 10); myRTB.MouseEnter += new EventHandler(myRTB_MouseEnter); myRTB.MouseLeave += new EventHandler(myRTB_MouseLeave); } void myRTB_MouseEnter(object sender, EventArgs e) { MyRitchTextBox rtb = (sender as MyRitchTextBox); if (rtb != null) { this.toolTip1.Show("Hello!!!", rtb); } } void myRTB_MouseLeave(object sender, EventArgs e) { MyRitchTextBox rtb = (sender as MyRitchTextBox); if (rtb != null) { this.toolTip1.Hide(rtb); } } public class MyRitchTextBox : RichTextBox { } }


Si está utilizando el control RichTextBox. Simplemente puede definir el objeto de información sobre herramientas y mostrar la información sobre herramientas a medida que se selecciona el texto moviendo el mouse dentro del control RichTextBox.

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); } }


Simplemente agregue la herramienta ToolTip desde el cuadro de herramientas al formulario y agregue este código en un evento mousemove de cualquier control que desee para que la información sobre herramientas comience en su mousemove

private void textBox3_MouseMove(object sender, MouseEventArgs e) { toolTip1.SetToolTip(textBox3,"Tooltip text"); // you can change the first parameter (textbox3) on any control you wanna focus }

Espero eso ayude

paz


También me gustaría agregar algo aquí que si carga el formulario deseado que contiene el control de información sobre herramientas antes de la ejecución del programa, entonces el control de información sobre esa forma no funcionará como se describe a continuación ...

[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); }

así que resolví este problema poniendo el siguiente código en el procedimiento de evento Fram_main_load como este

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


Utilizar:

ToolTip tip = new ToolTip(); private void richTextBox1_MouseMove(object sender, MouseEventArgs e) { Cursor a = System.Windows.Forms.Cursor.Current; if (a == Cursors.Hand) { Point p = richTextBox1.Location; tip.Show( GetWord(richTextBox1.Text, richTextBox1.GetCharIndexFromPosition(e.Location)), this, p.X + e.X, p.Y + e.Y + 32, 1000); } }

Use la función GetWord de mi otra respuesta para obtener la palabra flotante. Use la lógica del temporizador para desactivar volver a mostrar la información sobre herramientas como en la versión anterior. ejemplo.

En este ejemplo justo arriba, la información sobre herramientas muestra la palabra desplazada al marcar el puntero del mouse.

Si esta respuesta aún no es lo que está buscando, especifique la condición que caracteriza a la palabra que desea usar información sobre herramientas. Si lo quieres por palabra en negrita, por favor dímelo.