首页 新闻 会员 周边

设计器帮Items添加的莫名项 ?

0
悬赏园豆:200 [已关闭问题] 关闭于 2011-05-15 14:00

问题说明:

因为要编写一个自定义ComboBox,所以通过继承原有控件类来实现,再添加自定义的功能。问题就出在这个实现的过程中,还没有编写几行代码,马上发现了一个怪异的现象:
(逻辑上)明明没有向ComboBox的Items属性中添加任何内容,偏偏在测试的时候, 在设计界面的Items属性中,发现了控件的Name属性值给添加了进去。

image

1.将自定义控件添加到“工具箱”;

2.拖动“工具箱”里的自定义控件“YEComboBox”到窗体中
在这一步,仔细观察会发现,系统在绘制控件的刹那间,text文本框里面显现了一下默认的控件名“yeComboBox1”,然后迅速消失,在下次测试性添加相同控件的时候,就观察不到这个现象了,可能系统已经有“缓存”啦?)

3.查看控件“属性”里的“Items”项,在“字符串集合编辑器”中,就出现了刚才第2步中异常出现的默认控件名。

问题代码:

以下是该自定义控件的全部代码,非常少,但是就是不知道该怎么解决该问题。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Text;using System.Windows.Forms;using System.IO;namespace YEControl{    /// <summary>    /// 能够读取和保存历史记录的下拉框控件。    /// </summary>    [ToolboxBitmap(typeof(ComboBox))]    partial class YEComboBox : ComboBox    {        public YEComboBox()        {            InitializeComponent();        }        /// <summary>         /// 必需的设计器变量。        /// </summary>        private System.ComponentModel.IContainer components = null;        /// <summary>         /// 清理所有正在使用的资源。        /// </summary>        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>        protected override void Dispose(bool disposing)        {            if (disposing && (components != null))            {                components.Dispose();            }            base.Dispose(disposing);        }        #region 组件设计器生成的代码        /// <summary>         /// 设计器支持所需的方法 - 不要        /// 使用代码编辑器修改此方法的内容。        /// </summary>        private void InitializeComponent()        {            components = new System.ComponentModel.Container();            this.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;            this.AllowDrop = true;            this.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;            this.Name = "YEComboBox";        }        #endregion        protected override void OnTextChanged(EventArgs e)        {            base.OnTextChanged(e);            //只有当下拉列表框中不存在的时候才添加到集合中显示。            if (this.Text != "" && !this.Items.Contains(this.Text))                this.Items.Add(this.Text);                    }    }}

至此,问题就出现在最后一段重写OnTextChanged事件上。因为是通过设计器添加控件,所以无法调试。我也曾经试过直接通过代码添加该控件到窗体上,没有发现这个异常!

所以现在正在寻找解决方案中……

Asion Tang的主页 Asion Tang | 初学一级 | 园豆:200
提问于:2011-05-05 17:28
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册