Laden...

ToolTips auf inaktiven Steuerelementen anzeigen?

Erstellt von DavidT vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.089 Views
DavidT Themenstarter:in
998 Beiträge seit 2007
vor 14 Jahren
ToolTips auf inaktiven Steuerelementen anzeigen?

Hallo,

ich habe ein Menü mit mehreren Buttons die ich bei bestimmten Bedingungen undabhängig voneinadner disable. Nun möchte ich das TROTZ das enable auf flase steht, der ToolTip angezeigt wird, um dem Benutzer anzuzeigen, warum es daktiviert ist (weil eine Datei fehlt oder erkeine Rechte hat). Gibt es da eine Möglichkeit? So wie ich das verstehe ist die ShowAlways-Eigenschaft keine Lösung, weil es sich auf den Enablewert das übergeordneten Fensters bezieht und nicht auf den des Steuerelementes.

Danke im Voraus.

Gruß David

D
496 Beiträge seit 2005
vor 14 Jahren

also bei mir werden tooltips für buttons in der menüleiste angezeigt selbst wenn diese deaktiviert sind.

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

DavidT Themenstarter:in
998 Beiträge seit 2007
vor 14 Jahren

Und für normale buttons?

D
496 Beiträge seit 2005
vor 14 Jahren

dann nicht, aber ich dachte du hast ein menü?

ich habe ein Menü mit mehreren Buttons

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

R
164 Beiträge seit 2008
vor 14 Jahren

Buttons, bei denen "Enabled = true" festgelegt ist, rufen keine Maus-Events auf. Das ToolTip weiß daher nicht, wann der Mauszeiger über dem deaktivierten Button ist.
Man kann das Form.MouseMove-Event abonnieren und prüfen, ob der Mauszeiger über dem Button ist. Dann wird das ToolTip gegebenenfalls angezeigt.


 Button button; // deaktivierter Button
 bool visible; // Gibt an, ob das ToolTip sichtbar ist

 void Form1_MouseMove(object sender, MouseEventArgs e)
      {
         // Mauszeiger über dem Button?
         bool isover = this.GetChildAtPoint(e.Location) == this.button;
         if (isover && !visible)
         {
            // ToolTip anzeigen
            this.tip.Show("Wird doch angezeigt!", this.button, 0, 0);
            visible = true;
         }
         else if(!isover && visible)
         {
            // ToolTip sichtbar und Mauszeiger nicht über dem Button -> ToolTip verstecken
            this.tip.Hide(button);
            visible = false;
         }
      }

D
496 Beiträge seit 2005
vor 14 Jahren

das hab ich auch gerade rausgefunden.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication3
{
    public partial class Form1 : Form
    {
        bool IsShown = false;
        ToolTip toolTip1;

        public Form1()
        {
            InitializeComponent();

            toolTip1 = new ToolTip();
            toolTip1.AutoPopDelay = 5000;
            toolTip1.InitialDelay = 1000;
            toolTip1.ReshowDelay = 500;
            toolTip1.SetToolTip(this.button1, "ich bin ein tooltip");
         
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Control ctrl = this.GetChildAtPoint(e.Location);

            if (ctrl != null)
            {
                if (ctrl == this.button1 && !IsShown)
                {
                    string tipstring =
                      this.toolTip1.GetToolTip(this.button1);
                    this.toolTip1.Show(tipstring, this.button1,
                      this.button1.Width / 2, this.button1.Height / 2);
                    IsShown = true;
                }
            }
            else
            {
                this.toolTip1.Hide(this.button1);
                IsShown = false;
            }

        }

  
    }
}

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

DavidT Themenstarter:in
998 Beiträge seit 2007
vor 14 Jahren

Okay, danke euch beiden.

Gruß David