自定义ListBox重复项

时间:2014-01-15 05:39:50

标签: c# visual-c#-express-2010

帮助! 我正在尝试创建一个自定义ListBox控件,可用于从中选择DashStyle。问题是,当我将自定义组件拖到我的表单时,它会添加项目(这没关系),但是当我运行程序时,它再次添​​加项目,给我重复项。 这是我的代码:

namespace Help
{
    public partial class LineStyleListBox : ListBox
    {
        private Pen[] pens;
        string[] styleNames;
        public LineStyleListBox()
        {
            InitializeComponent();               
            styleNames = System.Enum.GetNames(typeof(DashStyle));
            pens = new Pen[styleNames.Length];
            for (int i = 0; i != pens.Length; i++) 
            {
                pens[i] = new Pen(new SolidBrush(Color.Black), 1);
                pens[i].DashStyle = (DashStyle)i;
            }                          
            Items.AddRange(styleNames);          
        }
    }
}

感谢任何帮助或评论。谢谢!

4 个答案:

答案 0 :(得分:0)

我能够这样做 -

if(LicenseManager.UsageMode == LicenseUsageMode.Designtime)
            Items.AddRange(styleNames);    

当我将控件添加到表单时,它仍以某种方式显示项目。 有人可以解释原因吗?如果有更好的方法。感谢

答案 1 :(得分:0)

尝试更改控件的构造函数,如下所示:

public LineStyleListBox()
{
  InitializeComponent();      

  // do not add items if the control is in design mode
  if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
    return;

  styleNames = System.Enum.GetNames(typeof(DashStyle));
  pens = new Pen[styleNames.Length];
  for (int i = 0; i != pens.Length; i++) 
  {
    pens[i] = new Pen(new SolidBrush(Color.Black), 1);
    pens[i].DashStyle = (DashStyle)i;
  }                          

  Items.AddRange(styleNames);          
}

答案 2 :(得分:0)

VS Designer序列化项目。当应用程序启动时,在LineStyleListBox构造函数中第1个添加的样式和第2个 - 在Form的InitializeComponent()中添加。

如果您想在Desing时看到样式,并且不想拥有任何新样式

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ListBox.ObjectCollection Items
{
    get { return base.Items; }
}

答案 3 :(得分:0)

一个简单的方法是使用bool hasAdded;,并在添加项目后将其设置为true,在添加项目之前进行检查。

希望这有助于某人!