2009-10-11 10 views
3

J'instancie mon propre ToolStripButton et l'ajoute à un ContextMenuStrip. Il apparaît, mais le texte est coupé:Le texte ToolStripButton est tronqué dans ContextMenuStrip

string[] layouts = new string[]{"Test 1", "Test 2", "Test 3"}; 
List<ToolStripButton> items = new List<ToolStripButton>(); 
foreach (string layout in layouts) 
{ 
    ToolStripButton item = new ToolStripButton(layout, image, LayoutClicked); 
    item.AutoSize = true; 
    items.Add(item); 
} 
layoutMenus.Items.Clear(); 
layoutMenus.Items.AddRange(items.ToArray()); 
layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y); 

Toute idée pourquoi le texte se couper comme la propriété AutoSize est true?

+0

Dans mon cas, je pourrais remplacer 'ToolStripButton' avec' ToolStripMenuItem' pour résoudre le problème. –

Répondre

2

Curieux; Je reproduis cette ... une bizarrerie reall (pour moi) est que la mise en .Width fixe du menu, il ... mais le mettre à quoi que ce soit (il semble ignorer la valeur totale):

layoutMenus.Width = 800; // could be 20, or 100 and would appear the same 

Voir si cela fonctionne. Cela me convient, même si cela n'a aucun sens.

Même:

layoutMenus.Width++; 
layoutMenus.Width--; 

laisse assez d'espace, mais

layoutMenus.Width = layoutMenus.Width; 

n'a pas (on peut supposer qu'il vérifie pour les non-changements et ne tient pas compte tous les effets secondaires de la présente ci-dessus).

1

J'ai le même problème. J'ai essayé toutes ces choses, et il s'est avéré que le MaxSize est réglé par erreur, comme (200, 0). Réinitialiser à (0,0) résoudre le problème.

+0

Voulez-vous dire 'ContextMenuStrip.MaximumSize'? – CodeFox

1

2 ans plus tard, j'ai rencontré le même problème. Je n'ai pas défini MaxSize et toucher la propriété Width n'a pas aidé non plus. Mon ContextMenuStrip ne contenait qu'un élément - un bouton grisé indiquant "Non pris en charge". Il a été tronqué à "Not Supp".

J'ai dû ajouter un élément fictif à la fin du ContextMenuStrip et définir sa visibilité sur False. Ensuite, le ContextMenuStrip était assez large pour montrer le premier élément que je me suis vraiment soucié de montrer.

Lien here

+0

Ajouter un élément factice a fonctionné pour moi. 'dummy.Width' doit être défini. Tous les éléments déroulants auront cette largeur. – Boogier

2

Après quelques refactoring d'une mise en œuvre du menu contextuel de travail précédemment, je suis confronté au même problème. Comme @PeteBaughman, je n'étais pas en mesure de résoudre ce problème en changeant le ContextMenuStrip.Width - la largeur n'a en fait pas changé (aussi ContextMenuStrip.MaximumSize n'a pas été speficied: (0,0)). L'ajout d'un élément invisible comme suggéré par Pete a fait l'affaire.

Après quelques expériences supplémentaires, j'ai trouvé une autre solution de contournement: Un appel à ContextMenuStrip.PerformLayout() a abouti au comportement attendu. (Appeler SuspendLayout et ResumeLayout avant et après l'ajout des éléments ne fonctionnait pas.)


Mise à jour: Le vrai problème est peut-être, qu'un ToolStripButton est ajouté à un ContextMenuStrip qui normalement créer un ToolStripMenuItem lorsqu'il est appelé comme ceci:

contextMenuStrip.Items.Add("Hello world"); // Returns a ToolStripMenuItem 

j'ai pu omettre le appelez PerformLayout() après avoir créé les éléments du bon type.

Questions connexes