我正在实例化我自己的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 :(得分:3)
好奇;我可以重现这个...一个怪异的怪(对我来说)是设置菜单的.Width
修复它...但是将设置为任何东西(它似乎完全忽略了这个值) :
layoutMenus.Width = 800; // could be 20, or 100 and would appear the same
看看是否有效。这对我来说,即使它没有任何意义。
偶:
layoutMenus.Width++;
layoutMenus.Width--;
留下足够的空间,但
layoutMenus.Width = layoutMenus.Width;
没有(大概是检查不变,忽略了上面的副作用)。
答案 1 :(得分:3)
在对以前工作的上下文菜单实现进行一些重构之后,我遇到了同样的问题。就像@PeteBaughman一样,我无法通过更改ContextMenuStrip.Width
来解决这个问题 - 事实上宽度没有改变(ContextMenuStrip.MaximumSize
也没有改变:(0,0)
)。
像Pete建议的那样添加一个不可见的项目就可以了。经过几次实验后,我发现了另一种解决方法:对ContextMenuStrip.PerformLayout()
的调用导致了预期的行为。
(在添加项目之前和之后调用SuspendLayout
和ResumeLayout
不起作用。)
更新:真正的问题可能是,ToolStripButton
被添加到ContextMenuStrip
,这通常会在这样调用时创建ToolStripMenuItem
:< / p>
contextMenuStrip.Items.Add("Hello world"); // Returns a ToolStripMenuItem
在创建了正确类型的项目之后,我能够省略对PerformLayout()
的调用。
答案 2 :(得分:2)
2年后,我遇到了同样的问题。我没有设置MaxSize,触摸Width属性也没有帮助。我的ContextMenuStrip只包含一个项目 - 一个灰色的按钮,表示“不支持”。它被截断为“Not Supp”。
我最终不得不在ContextMenuStrip的末尾添加一个虚拟项目,并将其可见性设置为False。然后,ContextMenuStrip足够宽,可以显示我真正关心的第一个项目。
链接here
答案 3 :(得分:1)
我有同样的问题。尝试了所有这些事情,结果证明MaxSize
是错误设置的,例如(200, 0)
。将其重置为(0,0)
以解决问题。
答案 4 :(得分:0)
为症状添加更多细节:就我而言,似乎仅在上下文菜单中只有一项时才会出现此问题。如果有多个项目,则宽度设置似乎正确。
然后致电ContextMenuStrip.PerformLayout
为我解决了这个问题。
答案 5 :(得分:0)
我有类似的问题。我想在菜单项列表中添加复选框。为此,我需要将复选框添加到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
在将主机项添加到列表之后,必须执行“自动调整大小”切换。