none
ToolTip RRS feed

  • Pregunta

  • Buenas noches.

    Tengo una duda sobre los ToolTip, se usarlos y todo lo básico acerca de estos.
    Pero la duda es a partir de que tengo botones con ToolTip asignados y todos van bien, pero si deshabilito el botón, ya no aparece el mensaje del ToolTip, no si exista la posibilidad de que aunque el botón esté deshabilitado pueda mostrar el texto del ToolTip

    Gracias por su atención y por sus ayuda :D

    miércoles, 6 de diciembre de 2017 5:48

Respuestas

  • "Esaú Vemo" preguntó:

    > Pero la duda es a partir de que tengo botones con ToolTip asignados y todos
    > van bien, pero si deshabilito el botón, ya no aparece el mensaje del ToolTip,
    > no si exista la posibilidad de que aunque el botón esté deshabilitado pueda
    > mostrar el texto del ToolTip

    Hola:

    Efectivamente así es: si el control está deshabilitado, sea o no un control Button, no aparece la información sobre la herramiento (ToolTip).

    Cuando el control esté deshabilitado, tienes que recurrir a referenciar el control sobre el que se encuentra el puntero del ratón, y mostrar la información de herramienta en una posición relativa del control, tal y como muestra el siguiente ejemplo.

    Inicia un nuevo proyecto de formularios Windows, e inserta en el formulario de inicio dos controles Button, un control TextBox y un control ToolTip. Deja los nombres que tienen por defecto. Copia/pega el siguiente código en la clase del formulario y ejecuta el proyecto.

    Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Forzar a que el texto de información se muestre con ' independencia que el formulario esté o no activo. ToolTip1.ShowAlways = True Me.ToolTip1.SetToolTip(Me.Button1, "Button1") Me.ToolTip1.SetToolTip(Me.TextBox1, "TextBox1") Me.Button2.Text = "Deshabilitar" End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Button1.Enabled = Not Button1.Enabled TextBox1.Enabled = Button1.Enabled If (Button1.Enabled) Then Me.Button2.Text = "Deshabilitar" Else Me.Button2.Text = "Habilitar" End If End Sub Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove

    Static CurrentControl As Control
    ' Referenciar el control del formulario existente en las coordenadas ' donde actualmente se encuentra el puntero del ratón. ' Dim ctrl As Control = Me.GetChildAtPoint(e.Location) If (Not ctrl Is Nothing) Then ' Existe un control en las coordenadas actuales del puntero del ratón. ' If ((Not ctrl.Enabled) AndAlso (CurrentControl Is Nothing)) Then ' El control se encuentra deshabilitado y el objeto temporal no ' almacena una referencia a un control concreto; obtener el texto ' del ToolTip que tiene establecido el control referenciado. ' Dim toolTipString As String = Me.ToolTip1.GetToolTip(ctrl) ' Mostrar el ToolTip sobre el centro del control. Me.ToolTip1.Show(toolTipString, ctrl, ctrl.Width \ 2, ctrl.Height \ 2) ' Guardar la referencia del control actual. CurrentControl = ctrl End If ElseIf (Not CurrentControl Is Nothing) Then ' El objeto temporal almacena la referencia del control ' que actualmente está mostrando la información de ' herramienta; ocultar el Tooltip. ' Me.ToolTip1.Hide(CurrentControl) ' Asignar el valor Nothing al control que ' almacena la referencia del control actual. CurrentControl = Nothing End If End Sub End Class

    Obviamente, en el formulario de tu proyecto real solamente tienes que insertar el evento MouseMove que aparece en el ejemplo. ;-)

    ¡IMPORTANTE! El ejemplo asume que el contenedor del control Button es el propio formulario. Es decir, que si el contenedor del control es un control GroupBox, por poner un ejemplo, entonces tendrás que implementar el evento MouseMove del control GroupBox:

        Private Sub GroupBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles GroupBox1.MouseMove
    
            Static CurrentControl As Control
    
            ' Referenciar el control del GroupBox existente en las coordenadas
            ' donde actualmente se encuentra el puntero del ratón.
            '
            Dim ctrl As Control = GroupBox1.GetChildAtPoint(e.Location)
    
            If (Not ctrl Is Nothing) Then
    
               Insertar aquí el resto del código
    
               ...
    
               ...
    
               ...
    
        End Sub
        

    En negrita aparecen los cambios que deberás efectuar.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 6 de diciembre de 2017 10:21
    Moderador