3

我正在实例化我自己的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吗?

4

6 回答 6

4

好奇的; 我可以重现这个......一个真正的奇怪(对我来说)是设置菜单.Width修复它......但是将它设置为任何东西(它似乎完全忽略了这个值):

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

看看这是否有效。它对我有用,即使它没有真正的意义。

甚至:

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

留出足够的空间,但

layoutMenus.Width = layoutMenus.Width;

没有(大概它检查非更改并忽略上述任何副作用)。

于 2009-10-11T07:30:01.340 回答
3

在对以前工作的上下文菜单实现进行了一些重构之后,我遇到了同样的问题。像@PeteBaughman 一样,我无法通过更改ContextMenuStrip.Width- 宽度实际上没有改变(也ContextMenuStrip.MaximumSize没有指定:)来解决这个问题(0,0)

按照皮特的建议添加一个不可见的项目就可以了。经过几次实验后,我发现了另一种解决方法:调用ContextMenuStrip.PerformLayout()导致了预期的行为。

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


更新:真正的问题可能是,将 aToolStripButton添加到 aContextMenuStrip通常会ToolStripMenuItem在调用时创建 a ,如下所示:

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

PerformLayout()在创建正确类型的项目后,我能够省略调用。

于 2014-04-07T12:43:07.253 回答
2

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

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

链接在这里

于 2012-08-02T22:47:18.673 回答
1

我也有同样的问题。尝试了所有这些东西,结果发现MaxSize是错误设置的,比如(200, 0). 重置它以(0,0)解决问题。

于 2010-11-29T21:59:17.890 回答
1

为症状添加一些细节:在我的情况下,似乎只有在上下文菜单中只有一个项目时才会出现问题。对于多个项目,宽度似乎设置正确。

打电话ContextMenuStrip.PerformLayout给我解决了这个问题。

于 2019-05-08T07:02:20.180 回答
1

我有类似的问题。我想在菜单项列表中添加复选框。为此,我需要将复选框添加到 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 切换必须在主机项目添加到列表后完成。

于 2019-05-22T07:27:00.913 回答