继承 System.Windows.Forms.ComboBox 实现支持自动完成功能的 ComboBox!个人感觉还可以!!!

/// <summary>
 /// ComboBox 的摘要说明。
 /// </summary>
 public class ComboBox : System.Windows.Forms.ComboBox
 {

  #region 字段
  /// <summary>
  /// 表示最近一次的用户交互操作是否是键盘操作。
  /// </summary>
  private bool isKeyPressed;
  /// <summary>
  /// 表示是否启用自动完成功能。
  /// </summary>
  private bool autoComplete;
  #endregion

  #region 属性
  /// <summary>
  /// 获取是否启用自动完成功能。
  /// </summary>
  [Bindable(true),Browsable(true),SRCategory(SR.CatBehavior),SRDescription(SR.ComboBoxAutoCompleteDescr)]
  public bool AutoComplete
  {
   get
   {
    return autoComplete;
   }
   set
   {
    autoComplete = value;
   }
  }
  #endregion

  #region 构造函数
  /// <summary>
  ///
  /// </summary>
  public ComboBox()
  {
   isKeyPressed = false;

   autoComplete = false;
  }
  #endregion

  #region 保护方法
  /// <summary>
  ///
  /// </summary>
  /// <param name="e"></param>
  protected override void OnTextChanged(EventArgs e)
  {
   bool flag = isKeyPressed;

   isKeyPressed = false;

   if(DropDownStyle != ComboBoxStyle.DropDown)  
   {
    base.OnTextChanged (e);
    return;
   }
   if(!flag)
   {
    base.OnTextChanged (e);
    return;
   }
   if(!autoComplete)
   {
    base.OnTextChanged (e);
    return;
   }

   BeginUpdate();

   string newText = Text;

   if(newText!="")
   {

    if(FindStringExact(newText)!=-1)
    {
     if(DroppedDown)
     {
      DroppedDown = false;
     }
    }
    else if(FindString(newText)!=-1)
    {

     DroppedDown = true;

     Text = newText;

     Select(newText.Length,0);

    }
   }
   else if(DroppedDown)
   {
    DroppedDown = false;
   }

   EndUpdate();

   base.OnTextChanged (e);

  }
  /// <summary>
  ///
  /// </summary>
  /// <param name="e"></param>
  protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
  {
   isKeyPressed = true;

   base.OnKeyPress (e);
  }
  /// <summary>
  ///
  /// </summary>
  /// <param name="e"></param>
  protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
  {
   isKeyPressed = false;

   base.OnMouseDown (e);
  }
  #endregion

 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值