C# 如何为MenuStrip子类设置默认MenuItem类型

C# 如何为MenuStrip子类设置默认MenuItem类型,c#,visual-studio,windows-forms-designer,C#,Visual Studio,Windows Forms Designer,我创建了MenuStrip和ToolStripMenuItem的子类,以便在运行时轻松定位 现在我的课程是这样的: public class LocalizedMenuStrip : MenuStrip { public void Localize() { foreach (ToolStripMenuItem Item in Items) { if (Item is LocalizedMenuItem)

我创建了
MenuStrip
ToolStripMenuItem
的子类,以便在运行时轻松定位

现在我的课程是这样的:

public class LocalizedMenuStrip : MenuStrip
{
    public void Localize()
    {
        foreach (ToolStripMenuItem Item in Items)
        {
            if (Item is LocalizedMenuItem)
            {
                ((LocalizedMenuItem)Item).Localize();
            }
        }
    }
}

这是我的计划,只有一件事困扰着我:

当我使用设计器将项目添加到我的
LocalizedMenuItem
时,我总是得到一个标准的
ToolStripMenuItem
。有没有办法告诉设计师改为创建
LocalizedMenuItem
s?可以通过向
LocalizedMenuStrip


非常感谢您的帮助

您需要应用[ToolStripDesignerAvailability]属性,以便在设计时选择自定义项目类。不清楚你现在是怎么做的。要使其成为默认选择,需要为MenuStrip定制设计器,这没有什么乐趣。编写自己的本地化方案从来都不是一个错误。现在我只需添加一个MenuItem,然后将其类型更改为我自己的MenuItemClass。工作不多,但可能会变得单调乏味。
public class LocalizedMenuItem : ToolStripMenuItem
{
    private String textKey;
    private LocalizedString LocalizedText;

    [Browsable(true)]
    [Category("Display")]
    [Description("Sets or returns the TextKey used to retrieve the localized text for this item.")]
    public String TextKey
    {
        get { return textKey; }
        set
        {
            textKey = value;
            LocalizedText = new LocalizedString(value);
            Text = LocalizedText;
        }
    }

    public void Localize()
    {
        Text = LocalizedText;
    }
}