如何让.Net控件在设计时InitializeComponent()中不生成相关代码(C#组件开发)

 如何让.Net控件在设计时InitializeComponent()中不生成相关代码

来源:Linuxdby.com 作者:Webmaster

    组件的一些公共属性不希望被VS在设计时加到InitializeComponent()方法中怎么处理呢?我试过了,将属性加上[Browsable(false)]也不行。 我的代码如下:
 

  1.    /// <summary>
  2.     /// 控制器通讯类型下拉列表框。
  3.     /// </summary>
  4.     public class CommunicationTypeComboBox : ComboBox
  5.     {
  6.         /// <summary>
  7.         /// 构造列表框实例。
  8.         /// </summary>
  9.         public CommunicationTypeComboBox()
  10.         {
  11.             Items.Add("串口");
  12.             Items.Add("TCP");
  13.         }
  14.         /// <summary>
  15.         /// 获取列表框中的所有项。
  16.         /// </summary>
  17.         [Browsable(false)]
  18.         public new ObjectCollection Items
  19.         {
  20.             get { return base.Items; }
  21.         }
  22.     }

    将控件放到窗体上,VS回自动在InitializeComponent()方法中加入一下代码。粗体部分。   

  1.           // 
  2.             // cmbCommunicationType
  3.             // 
  4.             this.cmbCommunicationType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
  5.             this.cmbCommunicationType.FormattingEnabled = true;
  6.             this.cmbCommunicationType.Items.AddRange(new object[] {
  7.             "串口",
  8.             "TCP"});
  9.             this.cmbCommunicationType.Location = new System.Drawing.Point(124, 66);
  10.             this.cmbCommunicationType.Name = "cmbCommunicationType";
  11.             this.cmbCommunicationType.SelectedItem = Xunmei.Door.CommunicationType.SerialPort;
  12.             this.cmbCommunicationType.Size = new System.Drawing.Size(121, 20);
  13.             this.cmbCommunicationType.TabIndex = 2;
  14.             this.cmbCommunicationType.SelectedIndexChanged += new System.EventHandler(this.cmbCommunicationType_SelectedIndexChanged);

    随着编辑次数的增会变成这样。除了不在构造函数中增加项以外,有没有办法解决这个问题? 

  1. this.cmbCommunicationType.Items.AddRange(new object[] {
  2.             "串口",
  3.             "TCP",
  4.             "串口",
  5.             "TCP",
  6.             "串口",
  7.             "TCP",
  8.             "串口",
  9.             "TCP",
  10.             "串口",
  11.             "TCP"});

     经过几天的努力终于找到了DesignOnlyAttribute 类 。指定某个属性 (Property) 是否只能在设计时设置。

    通过将 DesignOnlyAttribute 设置为 true 进行标记的成员只能在设计时进行设置。通常,这些属性 (Property) 只能在设计时存在,并且不对应于运行时对象上的某个实际属性 (Property)。

    没有属性 (Attribute) 或通过将 DesignOnlyAttribute 设置为 false 进行标记的成员可以在运行时进行设置。默认为 false。将CommunicationTypeComboBox的Items属性加上DesignOnlyAttribute 就可以完美解决该问题。

  1.         /// <summary>
  2.         /// 获取列表框中的所有项。
  3.         /// </summary>
  4.         [DesignOnly(false)]
  5.         public new ObjectCollection Items
  6.         {
  7.             get { return base.Items; }
  8.         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值