自定义Winforms组合框,也可以通过设计工具添加硬编码项

自定义Winforms组合框,也可以通过设计工具添加硬编码项,winforms,custom-controls,drop-down-menu,design-time-data,Winforms,Custom Controls,Drop Down Menu,Design Time Data,向所有用户致意 我创建了一系列自定义组合框控件,这些控件应始终具有硬编码项。自定义控件还具有GetEnum属性,用于返回与选定项等效的枚举 此控件的简单示例是ComboBox\u布尔版本 public partial class ComboBox_Boolean : ComboBox { public ComboBox_Boolean() { Initialize(); } public void Initialize() {

向所有用户致意

我创建了一系列自定义组合框控件,这些控件应始终具有硬编码项。自定义控件还具有GetEnum属性,用于返回与选定项等效的枚举

此控件的简单示例是ComboBox\u布尔版本

public partial class ComboBox_Boolean : ComboBox
{
    public ComboBox_Boolean()
    {
        Initialize();
    }
    public void Initialize()
    {
        this.Items.Clear();
        foreach (string b in (new string[] { ">", ">=", "<=", "<", "=", "!="}))
            this.Items.Add(b);
        this.SelectedIndex = 0;
        this.DropDownStyle = ComboBoxStyle.DropDownList;
    }

    public BooleanType SelectedBoolean() { Get{//foo} Set{//foo}}
}
public Enum BooleanType {LT, LE, GE, GT, EQ, NE}
公共部分类组合框\u布尔值:组合框
{
公共组合框_Boolean()
{
初始化();
}
公共无效初始化()
{
this.Items.Clear();
foreach(新字符串[]{“>”、“>=”、“”、,
">=",
"=",
"=",
"=",

“我必须仔细思考,才能准确解释为什么项目以这种方式显示在设计器中,但我认为,这与代码也在设计时运行这一事实有关就足够了

防止这种情况发生的方法是将控件置于
InitLayout
的覆盖中,这使您只能在不处于设计模式时运行它(并非控件中的所有代码都支持设计模式,但
InitLayout
支持):

protected override void InitLayout()
{
base.InitLayout();
如果(!设计模式)
{
this.Items.Clear();

foreach(字符串b在(新字符串[]{“>”,“>=”,“中)我必须非常努力地解释为什么项目会以这种方式显示在设计器中,但我认为知道这与代码也在设计时运行这一事实有关就足够了

防止这种情况发生的方法是将控件置于
InitLayout
的覆盖中,这使您只能在不处于设计模式时运行它(并非控件中的所有代码都支持设计模式,但
InitLayout
支持):

protected override void InitLayout()
{
base.InitLayout();
如果(!设计模式)
{
this.Items.Clear();

foreach(新字符串[]{“>”,“>=”,"这似乎成功了!非常感谢。作为后续问题,我正在考虑创建其他基于枚举的下拉列表…有没有办法缩短此操作?将下拉列表绑定到枚举,并让其返回所选值?似乎应该有…不客气。最好将另一个问题放到新的帖子中,这样您就可以继续了我会解释你的意图,社区会看到它。这似乎成功了!非常感谢。作为后续问题,我正在考虑创建其他基于枚举的下拉列表…有没有办法缩短此操作?将下拉列表绑定到枚举,并让它返回所选值?似乎应该有…不客气。最好将另一个问题放到新的帖子中,这样你就可以充分解释你的意图,社区也可以看到。
        this.myBooleanDropDown.Items.AddRange(new object[] {
        ">",
        ">=",
        "=",
        "<=",
        "<",
        "!=",
        ">",
        ">=",
        "=",
        "<=",
        "<",
        "!="});
protected override void InitLayout()
{
  base.InitLayout();
  if (!DesignMode)
  {
    this.Items.Clear();
    foreach (string b in (new string[] { ">", ">=", "<=", "<", "=", "!=" }))
      this.Items.Add(b);
    this.SelectedIndex = 0;
    this.DropDownStyle = ComboBoxStyle.DropDownList;
  }
}