帮助! 我正在尝试创建一个自定义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);
}
}
}
感谢任何帮助或评论。谢谢!
答案 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,在添加项目之前进行检查。
希望这有助于某人!