无法访问从设计器中的ToolStripControlHost继承的自定义控件的属性和事件

时间:2014-05-13 21:36:30

标签: c# .net contextmenu designer toolstripcontrolhost

我正在寻找一个自定义的ContextMenu项,它只包含一个包含Label和ComboBox的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 the Designer

但唯一的解决方案是创建一个继承FormStripControlHost形式并提供不带参数的构造函数的类根本不能解决我的问题。我还尝试创建新的空项目,重新启动VS并将类放在表单项目中或在extern库中也没有解决它。我还要补充一点,Form.designer文件中没有任何异常。

0 个答案:

没有答案