Question

Nous avons un formulaire MDI qui contient un certain nombre de formulaires enfants contenant des légendes variables indiquant le nom de fichier du document chargé. Lorsque les formulaires enfants sont maximisés, leur texte de titre est placé dans la barre de titre de la fenêtre parente, ce qui a souvent pour conséquence que le texte est trop long pour tenir dans la barre et que Windows est assez agréable pour ajouter des ellipses et tronquer le texte.

Toutefois, lorsque vous passez la souris sur la barre de titre de la fenêtre principale, une info-bulle s'affiche avec la chaîne entière, mais l'info-bulle contient souvent une petite fraction de la chaîne. Par exemple, si le texte du formulaire principal était:

Program1 - Filename:[Really_long_filename_that_doesnt_fit.file]

Cela apparaîtra comme suit dans l'info-bulle:

Program1 - Filename:[Really_long_filename_t

Éditer: L'info-bulle est toujours tronquée à exactement 100 caractères, ce qui me laisse penser qu'il s'agit d'une limite supérieure spécifiée quelque part.

Y a-t-il un moyen de changer cela pour qu'il affiche la chaîne entière ou, sinon, de désactiver complètement l'info-bulle?

Toutes les langues sont acceptables, même si nous le faisons en C #.

Était-ce utile?

La solution

Ceci utilise une info-bulle manuelle et un minuteur pour afficher / masquer une légende lorsque la souris survole la barre de titre.

public partial class Form1 : Form
{
    private ToolTip toolTip = new ToolTip();
    private Timer toolTipTimer = new Timer();
    private bool canShowToolTip = true;

    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case 0x2A0: // WM_NCMOUSEHOVER
                return;
            case (int)0x00A0: // WM_NCMOUSEMOVE
                if (m.WParam == new IntPtr(0x0002)) // HT_CAPTION
                {
                    if (canShowToolTip)
                    {
                        canShowToolTip = false;
                        toolTip.Show(this.Text, this, this.PointToClient(Cursor.Position), toolTip.AutoPopDelay);
                        toolTipTimer.Start();
                    }
                }
                return;
        }
        base.WndProc(ref m);
    }

    public Form1()
    {
        InitializeComponent();
        Form child = new Form();
        child.Text = "Program1 - Filename:[Really_long_filename_that_doesnt_fit.file] AAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
        child.MdiParent = this;
        child.Show();
        toolTip.AutoPopDelay = 5000;
        toolTipTimer.Interval = toolTip.AutoPopDelay;
        toolTipTimer.Tick += delegate(object sender, EventArgs e)
        {
            canShowToolTip = true;
        };
    }
}

Autres conseils

J'aimerais avoir quelque chose de plus utile pour vous, mais malheureusement, je ne pense pas qu'il existe un moyen de contourner ce problème. Vous pouvez soit raccourcir vos noms de fichiers, soit vous en occuper: (

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top