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

///

1<summary>   
2/// ComboBox 的摘要说明。   
3/// </summary>

public class ComboBox : System.Windows.Forms.ComboBox
{

#region 字段
///

1<summary>   
2/// 表示最近一次的用户交互操作是否是键盘操作。   
3/// </summary>

private bool isKeyPressed;
///

1<summary>   
2/// 表示是否启用自动完成功能。   
3/// </summary>

private bool autoComplete;
#endregion

#region 属性
///

1<summary>   
2/// 获取是否启用自动完成功能。   
3/// </summary>

[Bindable(true),Browsable(true),SRCategory(SR.CatBehavior),SRDescription(SR.ComboBoxAutoCompleteDescr)]
public bool AutoComplete
{
get
{
return autoComplete;
}
set
{
autoComplete = value;
}
}
#endregion

#region 构造函数
///

1<summary>   
2///   
3/// </summary>

public ComboBox()
{
isKeyPressed = false;

autoComplete = false;
}
#endregion

#region 保护方法
///

1<summary>   
2///   
3/// </summary>

///

1<param name="e"/>

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);

}
///

1<summary>   
2///   
3/// </summary>

///

1<param name="e"/>

protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
isKeyPressed = true;

base.OnKeyPress (e);
}
///

1<summary>   
2///   
3/// </summary>

///

1<param name="e"/>

protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
isKeyPressed = false;

base.OnMouseDown (e);
}
#endregion

}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus