Estoy tratando de mostrar información sobre herramientas cuando el ratón pasa por encima de un control deshabilitado. Desde un control deshabilitado no controla ninguno de los eventos, tengo que hacer que en el formulario principal. Decidí hacer esto por el manejo de la MouseMove evento en el formulario principal. Este es el código que hace el trabajo:

    void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        m_toolTips.SetToolTip(this, "testing tooltip on " + DateTime.Now.ToString());
        string tipText = this.m_toolTips.GetToolTip(this);
        if ((tipText != null) && (tipText.Length > 0))
        {
            Point clientLoc = this.PointToClient(Cursor.Position);
            Control child = this.GetChildAtPoint(clientLoc);
            if (child != null && child.Enabled == false)
            {
                m_toolTips.ToolTipTitle = "MouseHover On Disabled Control";
                m_toolTips.Show(tipText, this, 10000);
            }
            else
            {
                m_toolTips.ToolTipTitle = "MouseHover Triggerd";
                m_toolTips.Show(tipText, this, 3000);
            }
        }
    }

El código se encarga de la descripción de la pantalla para el control deshabilitado. El problema es que cuando el ratón pasa por encima de un control deshabilitado, el texto mantiene el cierre y volver de nuevo. Desde el tiempo de visualización he añadido en la descripción, cuando el ratón está encima del formulario principal, el MouseMove el evento se llama aproximadamente cada 3 segundos, por lo que la descripción se actualiza cada 3 segundos. Pero cuando el ratón está sobre un control deshabilitado, la descripción se actualiza cada 1 segundo. También, cuando la descripción se actualiza por encima de la forma, el texto se actualiza con un breve destello. Pero cuando la descripción se actualiza por encima de un control deshabilitado, la descripción de windows se cierra como si el ratón se mueve dentro de un control habilitado y la descripción se supone que ser cerrado. pero, a continuación, la descripción vuelve a aparecer de inmediato.

Alguien me puede decir por qué es esto? Gracias.

InformationsquelleAutor DJ. | 2009-11-13

5 Comentarios

  1. 14

    puede mostrar la descripción sólo una vez cuando el ratón golpea el disbled de control y, a continuación, ocultar es cuando el ratón abandona. Pls, echa un vistazo a el siguiente código, se debe mostrar un mensaje de información sobre herramientas para todos los discapacitados controles en el formulario

    private ToolTip     _toolTip = new ToolTip();
    private Control     _currentToolTipControl = null; 
    
    public Form1()
    {
        InitializeComponent();
    
        _toolTip.SetToolTip(this.button1, "My button1");
        _toolTip.SetToolTip(this.button2, "My button2");
        _toolTip.SetToolTip(this.textBox1, "My text box");
    }
    
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        Control control = GetChildAtPoint(e.Location);
        if (control != null)
        {
            if (!control.Enabled && _currentToolTipControl == null)
            {
                string toolTipString = _toolTip.GetToolTip(control);
                //trigger the tooltip with no delay and some basic positioning just to give you an idea
                _toolTip.Show(toolTipString, control, control.Width/2, control.Height/2);
                _currentToolTipControl = control;
            }
        }
        else
        {
            if (_currentToolTipControl != null) _toolTip.Hide(_currentToolTipControl);
            _currentToolTipControl = null;
        }
    }

    espero que esto ayude, saludos

    • Esto parece casi trabajo. Algunos controles se comportan correctamente, mientras que otros todavía están parpadeando.
    • Funciona mejor que DJ respuesta para mí. He añadido un control.De verificación Visible, así que no pop-up herramienta de consejos invisible a los controles. También he movido el ocultar bloque antes del show de bloque y comprueba si(_currentToolTipControl != null && _currentToolTipControl != de control) { …Hide(); _currentToolTipControl = null; } (sin esto, un movimiento rápido a otro control deshabilitado no puede actualizar la información sobre herramientas).
  2. 7

    La respuesta resultó ser un poco más simple, pero necesario para ser aplicado en todo momento.

    void OrderSummaryDetails_MouseMove(object sender, MouseEventArgs e)
    {
          Control control = GetChildAtPoint(e.Location);
          if (control != null)
          {
              string toolTipString = mFormTips.GetToolTip(control);
              this.mFormTips.ShowAlways = true;
              //trigger the tooltip with no delay and some basic positioning just to give you an idea
              mFormTips.Show(toolTipString, control, control.Width / 2, control.Height / 2);
          }
    }
  3. 2

    He probado muchas pero terminamos con este sencillo truco que creo que es más efectivo.

    Crear una subclase(CustomControl sólo con la base de control en él), que se extiende UserControl

    a continuación, en lugar de establecer «Habilitado» de la propiedad a false crear un Método que desactiva solo basecontrol en lugar de toda la CustomControl.

    Conjunto de la punta de la herramienta en CustomControl todavía será capaz de disparar eventhandlers configuración de la basecontrol movilidad. Esto funciona siempre que CustomControl es más bien en el uso de la codificación en cada formulario se puede utilizar con el.

    Aquí está la sugerencia.. 🙂

    public partial class MyTextBox : UserControl
    {
       ...
       ...
       ...
    
    
       public void DisableMyTextBox()
        {
            this.txt.Enabled = false;  //txt is the name of Winform-Textbox from my designer
            this.Enabled = true;
        }
    
        public void EnableMyTextBox()
        {
            this.txt.Enabled = true;
            this.Enabled = true;
        }
    
        //set the tooltip from properties tab in designer or wherever
    }
  4. 0

    He creado un nuevo control de usuario que sólo contiene un botón.

    public partial class TooltipButton : UserControl
    {
        public TooltipButton()
        {
            InitializeComponent();
        }
    
        public new bool Enabled
        {
            get { return button.Enabled; }
            set { button.Enabled = value; }
        }
    
        [Category("Appearance")]
        [Description("The text displayed by the button.")]
        [EditorBrowsable(EditorBrowsableState.Always)]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Bindable(true)]
        public override string Text
        {
            get { return button.Text; }
            set { button.Text = value; }
        }
    
        [Category("Action")]
        [Description("Occurs when the button is clicked.")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public new event EventHandler Click;
    
        private void button_Click(object sender, EventArgs e)
        {
            //Bubble event up to parent
            Click?.Invoke(this, e);
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here