我正在尝试以编程方式将一组子菜单添加到上下文菜单中。在这种情况下,我遇到了一个问题。例如,一个采用以下最小的例子:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
foreach (PropagationFlags entry in PropagationFlags.GetValues(typeof(PropagationFlags)))
{
RadioButton rb = new RadioButton();
rb.Text = entry.ToString();
rb.Tag = entry;
rb.AutoSize = true;
ToolStripControlHost Ch = new ToolStripControlHost(rb);
Ch.AutoSize = true;
((ToolStripMenuItem)contextMenuStrip.Items["testEntry"]).DropDown.Items.Add(Ch);
}
}
}
}
这里的Contextmenu有三个子项(这是正确的),但遗憾的是最后一项的文本被切断(应该是InheritOnly)。 (见截图1)。
当我现在修改代码并添加这样的附加项目时:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
foreach (PropagationFlags entry in PropagationFlags.GetValues(typeof(PropagationFlags)))
{
RadioButton rb = new RadioButton();
rb.Text = entry.ToString();
rb.Tag = entry;
rb.AutoSize = true;
ToolStripControlHost Ch = new ToolStripControlHost(rb);
Ch.AutoSize = true;
((ToolStripMenuItem)contextMenuStrip.Items["testEntry"]).DropDown.Items.Add(Ch);
}
RadioButton rb2 = new RadioButton();
rb2.Text = "test";
rb2.AutoSize = true;
ToolStripControlHost Ch2 = new ToolStripControlHost(rb2);
Ch2.AutoSize = true;
((ToolStripMenuItem)contextMenuStrip.Items["testEntry"]).DropDown.Items.Add(Ch2);
}
}
}
代码工作正常,并且subitem numnber三得到它的完整文本。请参阅以下屏幕截图
这种情况发生在各种枚举中,而不仅仅是这个。
这里有人知道这种行为还是能够重现它?我正在使用VS 2013 Professional。
答案 0 :(得分:0)
我终于找到了解决方案或至少是一种解决方法。以编程方式添加另一个项目并直接再次删除它确实很有帮助。我不知道为什么这样做仍然认为这是C#的一个错误,但至少我发现了一个解决方法......
答案 1 :(得分:0)
您的问题出现在特定的文本长度上,并且可以比上面的示例更简单地再现。只需使用“PropogationFlags.None”。
核心原因是由于首次初始化Font
时使用了错误的RadioButton
。添加后续项目时,Font
已正确设置并自行更正。
要修复上述代码,请明确设置Font
或RadioButton
的{{1}}以匹配主机ToolStripControlHost
。
ToolStripItem