以编程方式向上下文菜单添加复选框:文本被切断。奇怪

时间:2014-03-24 18:35:30

标签: c# winforms

我正在尝试以编程方式将一组子菜单添加到上下文菜单中。在这种情况下,我遇到了一个问题。例如,一个采用以下最小的例子:

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)。 screenshot1

当我现在修改代码并添加这样的附加项目时:

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三得到它的完整文本。请参阅以下屏幕截图enter image description here

这种情况发生在各种枚举中,而不仅仅是这个。

这里有人知道这种行为还是能够重现它?我正在使用VS 2013 Professional。

2 个答案:

答案 0 :(得分:0)

我终于找到了解决方案或至少是一种解决方法。以编程方式添加另一个项目并直接再次删除它确实很有帮助。我不知道为什么这样做仍然认为这是C#的一个错误,但至少我发现了一个解决方法......

答案 1 :(得分:0)

您的问题出现在特定的文本长度上,并且可以比上面的示例更简单地再现。只需使用“PropogationFlags.None”。

enter image description here

核心原因是由于首次初始化Font时使用了错误的RadioButton。添加后续项目时,Font已正确设置并自行更正。

要修复上述代码,请明确设置FontRadioButton的{​​{1}}以匹配主机ToolStripControlHost

ToolStripItem

enter image description here