繁体   English   中英

ToolStripButton文本在ContextMenuStrip中被截断

[英]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()导致预期的行为。

(在添加项目之前和之后调用SuspendLayoutResumeLayout不起作用。)


更新:真正的问题可能是, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM