2010-12-03 7 views
9

J'ai un bouton sur la WinForm la longueur du texte de bouton peut très au cours de diverses opérations ..Afficher infobulle pour un bouton lorsque le texte est trop long

Je ne veux pas faire varier la taille du bouton (donc j'ai mis « Autosize » sur false)

Comment afficher l'info-bulle (du texte du bouton complet) sur le vol stationnaire de la souris chaque fois que Button Text est excisées?

S'il vous plaît Notez que je ne veux pas infobulle toujours ..... Je veux seulement lorsque le bouton texte excisées

Répondre

13

Espérons que cela vous aide à code

if (button1.Text.Length > Your button text length to be checked) 
{ 
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); 
    ToolTip1.SetToolTip(this.button1, this.button1.Text); 
} 

Vous devez écrire le code dans les bouton MouseHover événement

+0

Cela fonctionne très bien, une chose que je remarqué était si le bouton est activé, il ne sera pas affiché. J'ai découvert cela parce que je voulais mettre une raison pour laquelle un bouton était désactivé. – DanO

1

Je pense que vous devez vérifier manuellement la longueur du texte sur le bouton avec la taille du bouton

et si grand que vous devez ajouter la propriété infobulle de bouton d'exécution

ne pas oublier d'ajouter le contrôle d'info-bulle dans votre projet en faisant glisser la boîte à outils

Merci

1

Alternative: utiliser la propriété AutoElipsis du bouton True.

1

Je ne pense pas que les réponses à ce jour soient tout à fait correctes - la longueur de la chaîne rendue (et c'est ce dont vous avez besoin lorsque vous prenez en compte les dimensions de votre bouton) peut varier en fonction de la police utilisation. En utilisant une police proportionnelle telle que Microsoft Sans Serif retournera différentes dimensions pour les chaînes contenant le même nombre de caractères lorsque ces caractères diffèrent, par exemple .:

« iiiiiiiiii » est pas aussi large que

« wwwwwwwwww ».

Vous devez utiliser la méthode MeasureString de la classe `Graphics

Graphics grfx = Graphics.FromImage(new Bitmap(1, 1)); 

// Set a proportional font 
button1.Font = new Font("Microsoft Sans Serif", 8.25f, FontStyle.Regular); 
SizeF bounds = grfx.MeasureString(
    button1.Text, 
    button1.Font, 
    new PointF(0, 0), 
    new StringFormat(StringFormatFlags.MeasureTrailingSpaces)); 
MessageBox.Show("Text dimensions: " + bounds.Width + "x" + bounds.Height); 

// Set a non-proportional font 
button1.Font = new Font("Courier New", 8.25f, FontStyle.Regular); 
bounds = grfx.MeasureString(
    button1.Text, 
    button1.Font, 
    new PointF(0, 0), 
    new StringFormat(StringFormatFlags.MeasureTrailingSpaces)); 
MessageBox.Show("Text dimensions: " + bounds.Width + "x" + bounds.Height); 
Questions connexes