2009-10-11 177 views
3

我正在实例化我自己的ToolStripButton并将其添加到ContextMenuStrip。它弹出,但文本被切断:ToolStripButton文本被切断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); 

任何想法,为什么文本被截断为AutoSize属性是true

+0

在我的情况下,我可以用'ToolStripMenuItem'替换'ToolStripButton'来解决这个问题。 – 2016-12-20 14:52:22

回答

2

好奇;我可以重现这个......一个雷尔怪胎(我)是设置菜单的.Width修复它...但它设置为任何(似乎完全忽视值):

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

见如果有效的话。它确实适合我,尽管它没有任何意义。

即使是:

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

留下了足够的空间,但

layoutMenus.Width = layoutMenus.Width; 

不(据推测它会检查非改变而忽略任何副作用以上了)。

1

我有同样的问题。尝试了所有这些事情,结果发现MaxSize是错误的,如(200, 0)。将其重置为(0,0)可解决问题。

+0

你是不是指'ContextMenuStrip.MaximumSize'? – CodeFox 2014-04-07 12:04:11

1

2年后,我遇到了同样的问题。我没有设置MaxSize,并且触摸Width属性也没有帮助。我的ContextMenuStrip只包含一个项目 - 一个灰色的按钮,表示“不支持”。它被截断为“Not Supp”。

我最终不得不将一个虚拟项添加到ContextMenuStrip的末尾并将其可见性设置为False。然后,ContextMenuStrip足以显示我实际关心的第一个项目。

链接here

+0

添加虚拟物品为我工作。必须设置“dummy.Width”。所有下拉项目都将具有此宽度。 – Boogier 2015-03-25 07:27:57

2

以前的工作上下文菜单中执行的一些重构后,我一直面临着同样的问题。像@PeteBaughman一样,我无法通过更改ContextMenuStrip.Width来修复此问题 - 宽度实际上并未发生变化(也不是ContextMenuStrip.MaximumSize未指定:(0,0))。

添加一个不可见的物品,因为皮特建议做的伎俩。经过多次实验后,我发现另一个解决方法:致电ContextMenuStrip.PerformLayout()导致预期的行为。

(呼叫SuspendLayoutResumeLayout添加项目前后无法正常工作。)


更新:真正的问题可能是,一个ToolStripButton添加到ContextMenuStrip这通常会创建一个ToolStripMenuItem时这样调用:

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

我能够省略创建正确的项目后,致电PerformLayout()