编程疑难杂症の设计器帮Items添加的莫名项

引言:

在编程的过程中,总会碰到一些让人无从下手去解决的问题。在此特地记录下来,一来借助园友的力量帮忙解决问题,二来也给碰到同样问题的朋友提供一点点帮助。

 

问题说明:

因为要编写一个自定义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事件上。因为是通过设计器添加控件,所以无法调试。我也曾经试过直接通过代码添加该控件到窗体上,没有发现这个异常!

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

转载于:https://www.cnblogs.com/AsionTang/archive/2011/04/13/2015190.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值