[英]ToolStripButton text gets cut off in 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
而被切断了?
好奇; 我可以重现这个...一个怪异怪(对我来说)是设置菜单的.Width
修复它...但设置为任何东西 (它似乎完全忽略该值):
layoutMenus.Width = 800; // could be 20, or 100 and would appear the same
看看是否有效。 这对我来说,即使它没有任何意义。
甚至:
layoutMenus.Width++;
layoutMenus.Width--;
留下足够的空间,但是
layoutMenus.Width = layoutMenus.Width;
没有(可能是它检查了不变化并忽略了上述的任何副作用)。
在对先前工作的上下文菜单实现进行一些重构之后,我遇到了同样的问题。 像@PeteBaughman一样,我无法通过更改ContextMenuStrip.Width
来解决这个问题 - 实际上宽度没有改变(也没有设置ContextMenuStrip.MaximumSize
: (0,0)
)。
像Pete建议的那样添加一个不可见的项目就可以了。 经过几次实验后,我发现了另一种解决方法 :调用ContextMenuStrip.PerformLayout()
导致预期的行为。
(在添加项目之前和之后调用SuspendLayout
和ResumeLayout
不起作用。)
更新:真正的问题可能是, ToolStripButton
被添加到ContextMenuStrip
,它通常在调用时创建ToolStripMenuItem
:
contextMenuStrip.Items.Add("Hello world"); // Returns a ToolStripMenuItem
在创建了正确类型的项目之后,我能够省略对PerformLayout()
的调用。
2年后,我遇到了同样的问题。 我没有设置MaxSize,触摸Width属性也没有帮助。 我的ContextMenuStrip只包含一个项目 - 一个灰色的按钮,表示“不支持”。 它被截断为“Not Supp”。
我最终不得不在ContextMenuStrip的末尾添加一个虚拟项目,并将其可见性设置为False。 然后,ContextMenuStrip足够宽,可以显示我真正关心的第一个项目。
链接在这里
我也有同样的问题。 尝试了所有这些事情,结果证明MaxSize
是错误设置的,如(200, 0)
MaxSize
(200, 0)
。 将其重置为(0,0)
解决问题。
为症状添加一些细节:在我的情况下,似乎只在上下文菜单中只有一个项目时才会出现问题。 对于多个项目,宽度似乎设置正确。
并且调用ContextMenuStrip.PerformLayout
为我修复了这个。
我有类似的问题。 我想在菜单项列表中添加复选框。 为此,我需要将复选框添加到ToolStripControlHost,然后将ToolStripControlHost添加到ToolStripMenuItem对象。 最后一个复选框的名称总是被截断3个字符。 我的解决方案是切换最后一个项目主机的AutoSize,如下所示:
Dim chkbox As System.Windows.Forms.CheckBox = New System.Windows.Forms.CheckBox()
chkbox.Text = "xxxxx"
Dim tshost As ToolStripControlHost = New ToolStripControlHost(chkbox)
tsmiAssemblySpecificTools.DropDownItems.Add(tshost)
tshost.AutoSize = False
tshost.AutoSize = True
必须在将主机项添加到列表后执行AutoSize切换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.