自动代码生成C#用户控制

自动代码生成C#用户控制,c#,winforms,user-controls,C#,Winforms,User Controls,我用C#为DriveComboBox编写了一个新组件 (它继承自ImageComboBox—在internet上找到的组件),请参见代码示例: public class DriveComboBox : ImageComboBox.ImageComboBox { public DriveComboBox() : base() { foreach (ImageComboBoxItem item in allImageComboBoxItems)

我用C#为DriveComboBox编写了一个新组件 (它继承自ImageComboBox—在internet上找到的组件),请参见代码示例:

public class DriveComboBox : ImageComboBox.ImageComboBox
{
    public DriveComboBox()
        : base()
    {
        foreach (ImageComboBoxItem item in allImageComboBoxItems)
        {
           this.Items.Add(item);                
        }
    }
}
此部分代码将驱动器添加到控件中,并在将此控件拖动到窗体中后,将项目添加到窗体代码的设计器中。 问题是,一旦程序运行,上面的代码会添加项目,然后设计器代码会再次添加项目,因此最终会出现两个项目


问题是添加项的位置应该在控件中的何处,或者如何防止设计器再次添加它们?

我遇到了相同的问题,visual studio的“visual???”设计器似乎可以使用运行时代码作为设计时代码。 我不明白到底发生了什么,但我确实用这种方法避免了问题:

protected bool IsInDesignMode
{
    get { return DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime; }
}
我是这样使用的:

public DriveComboBox()
    : base()
{
    if (IsInDesignMode == false)
    {
        foreach (ImageComboBoxItem item in allImageComboBoxItems)
        {
           this.Items.Add(item);                
        }
    }
}  

我也有同样的问题,似乎VisualStudio的“visual???”设计器可以使用运行时代码作为设计时代码。 我不明白到底发生了什么,但我确实用这种方法避免了问题:

protected bool IsInDesignMode
{
    get { return DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime; }
}
我是这样使用的:

public DriveComboBox()
    : base()
{
    if (IsInDesignMode == false)
    {
        foreach (ImageComboBoxItem item in allImageComboBoxItems)
        {
           this.Items.Add(item);                
        }
    }
}  

什么是
ImageComboBox
?@DavidG这是一个扩展的、由所有者绘制的ComboBox,它增加了在ComboBox下拉列表和编辑(文本)框中显示图像的支持。什么是
ImageComboBox
?@DavidG这是一个扩展的,所有者绘制的组合框,它增加了对在组合框下拉列表和编辑(文本)框中显示图像的支持。