3

我正在寻找一个自定义的 ContextMenu 项目,它仅由一个包含标签和组合框的 FlowLayoutPanel 组成。我希望能够在设计时在 Visual Studio 2013 的设计器中访问我的自定义控件的属性和事件。我希望能够在 MenuStrip、ToolStripMenuItem 或 ContextMenu 中使用我的自定义控件。我的实际问题是,如果我将控件直接插入到 MenuStrip 中,一切正常,但当控件位于 ToolStripMenuItem 或 ContextMenu 中时,我无法访问控件的属性窗口。属性窗口全是白色的,并且设计器中的控件出现故障。

所以这是我的代码(我还没有实现任何属性或任何事件,但无论如何我应该可以在属性窗口中访问继承的属性和事件。事实上,当我将控件插入到 MenuStrip 而不是在另一个二。)

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace CustomControlLib
{
    [ToolStripItemDesignerAvailabilityAttribute(ToolStripItemDesignerAvailability.MenuStrip        | ToolStripItemDesignerAvailability.ToolStrip |    ToolStripItemDesignerAvailability.ContextMenuStrip)]
    public class LblCboxStripControl : ToolStripControlHost
    {
        private Label controlName;
        private ComboBox controlComboBox;
        private FlowLayoutPanel controlPanel;

        public LblCboxStripControl()
            : base(CreateControlInstance())
        {
            controlPanel = (FlowLayoutPanel)base.Control;
            controlPanel.AutoSize = true;
            controlPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            controlPanel.BackColor = Color.Transparent;

            controlName = new Label();
            controlName.BackColor = Color.Transparent;
            controlName.AutoSize = true;
            controlName.Dock = DockStyle.None;
            controlName.Text = "Control name";

            controlComboBox = new ComboBox();

            controlPanel.Controls.Add(controlName);
            controlPanel.Controls.Add(controlComboBox);
        }

        public static FlowLayoutPanel CreateControlInstance()
        {
            FlowLayoutPanel flp = new FlowLayoutPanel();
            return flp;
        }
    }
}

我在这里看到过类似的帖子: .NET Custom Control (ToolStripControlHost) Wreaks Havoc on Designer

但唯一的解决方案是创建一个继承自 ToolStripControlHost 并提供不带参数的构造函数的类,这根本不能解决我的问题。我还尝试创建新的空项目,重新启动 VS 并将类放入表单项目或外部库中也不能解决它。我还要补充一点,Form.designer 文件中没有什么不寻常的地方。

4

0 回答 0