我正在寻找一个自定义的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文件中没有任何异常。