组件的一些公共属性不希望被vs在设计时加到initializecomponent()方法中怎么处理呢?我试过了,将属性加上[browsable(false)]也不行。
我的代码如下:
/// <summary>
/// 控制器通讯类型下拉列表框。
/// </summary>
public class communicationtypecombobox : combobox
{
/// <summary>
/// 构造列表框实例。
/// </summary>
public communicationtypecombobox()
{
items.add("串口");
items.add("tcp");
}
/// <summary>
/// 获取列表框中的所有项。
/// </summary>
[browsable(false)]
public new objectcollection items
{
get { return base.items; }
}
}
将控件放到窗体上,vs回自动在initializecomponent()方法中加入一下代码。粗体部分。
//
// cmbcommunicationtype
//
this.cmbcommunicationtype.dropdownstyle = system.windows.forms.comboboxstyle.dropdownlist;
this.cmbcommunicationtype.formattingenabled = true;
this.cmbcommunicationtype.items.addrange(new object[] {
"串口",
"tcp"});
this.cmbcommunicationtype.location = new system.drawing.point(124, 66);
this.cmbcommunicationtype.name = "cmbcommunicationtype";
this.cmbcommunicationtype.selecteditem = xunmei.door.communicationtype.serialport;
this.cmbcommunicationtype.size = new system.drawing.size(121, 20);
this.cmbcommunicationtype.tabindex = 2;
this.cmbcommunicationtype.selectedindexchanged += new system.eventhandler(this.cmbcommunicationtype_selectedindexchanged);
随着编辑次数的增会变成这样。除了不在构造函数中增加项以外,有没有办法解决这个问题?
this.cmbcommunicationtype.items.addrange(new object[] {
"串口",
"tcp",
"串口",
"tcp",
"串口",
"tcp",
"串口",
"tcp",
"串口",
"tcp"});
经过几天的努力终于找到了designonlyattribute 类 。
指定某个属性 (property) 是否只能在设计时设置。
通过将 designonlyattribute 设置为 true 进行标记的成员只能在设计时进行设置。通常,这些属性 (property) 只能在设计时存在,并且不对应于运行时对象上的某个实际属性 (property)。
没有属性 (attribute) 或通过将 designonlyattribute 设置为 false 进行标记的成员可以在运行时进行设置。默认为 false。
将communicationtypecombobox的items属性加上designonlyattribute 就可以完美解决该问题。
/// <summary>
/// 获取列表框中的所有项。
/// </summary>
[designonly(false)]
public new objectcollection items
{
get { return base.items; }
}
新闻热点
疑难解答
图片精选