怎样实现Combox中输入文字(或拼音)就按照索引排序,按回车后便选中第一项??百分百结帐!

yxred 2005-08-21 10:26:10
如一个combox有如下项:
张三
张四
张五
李三
李四
李五
周三
周四
周五


当输入“张”时出现
张三
张四
张五
按回车,选择 张三,按2选择 张四 按3选择 张五

当我输入"ZS"时,出现张三/周三/按回车选择 张三,按2选择 周三

当输入一个都没有选择时,提示出错,或添加数据库,不知这个好不好做,或提供思路》OK!
有实现的例子就更好了!
...全文
558 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanggj 2005-11-14
  • 打赏
  • 举报
回复
学习
iheshi 2005-10-07
  • 打赏
  • 举报
回复
http://iheshi.cnblogs.com/archive/2005/10/07/249782.html
flyboy20 2005-08-22
  • 打赏
  • 举报
回复
太多了
o1234567890 2005-08-22
  • 打赏
  • 举报
回复
我都晕了
jinjazz 2005-08-22
  • 打赏
  • 举报
回复
http://borland.mblogger.cn/jinjazz/posts/23144.aspx

using System;
using System.Runtime.InteropServices;

namespace AutoComplete
{
/// <summary>
/// ComboboxHelper 的摘要说明。
/// 调用:
/// private void Form1_Load(object sender, System.EventArgs e)
/// {
/// new SetComboboxAuto(this.comboBox1);
/// }
/// </summary>
///

public class COMEnumString :UCOMIEnumString
{
public string[] StringList;
private int currentPosition = 0;

public int Next(
int celt,
string[] rgelt,
out int pceltFetched)
{

pceltFetched = 0;
while ((currentPosition <= StringList.Length-1) && (pceltFetched < celt))
{
rgelt[pceltFetched] = StringList[currentPosition];
pceltFetched++;
currentPosition++;
}

if (pceltFetched == celt)
return 0; // S_OK;
else
return 1; // S_FALSE;

}
public int Skip(
int numElementToSkip)
{
currentPosition += numElementToSkip;
if (currentPosition <= StringList.Length - 1)
return 0; // S_OK;
else
return 1; // S_FALSE;
}
public int Reset()
{
currentPosition = 0;
return 0;
}

public void Clone(
out UCOMIEnumString ppenum)
{
COMEnumString clone = new COMEnumString();
clone.currentPosition = currentPosition;
clone.StringList = (String[])StringList.Clone();
ppenum = clone;
}
}

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("EAC04BC0-3791-11D2-BB95-0060977B464C")]
public interface IAutoComplete2
{
Int32 Init(
IntPtr hwndEdit,
[MarshalAs(UnmanagedType.IUnknown)]
Object punkACL,
[MarshalAs(UnmanagedType.LPWStr)]
string pwszRegKeyPath,
[MarshalAs(UnmanagedType.LPWStr)]
string pwszQuickComplete);

[PreserveSig]
Int32 Enable(
Int32 fEnable);

[PreserveSig]
Int32 SetOptions(
UInt32 dwFlag);

[PreserveSig]
Int32 GetOptions(
out UInt32 pdwFlag);


}

[Flags]
public enum AutoCompleteOptions
{
None = 0, //没有自动完成
AutoSuggest = 0x1,//启用自动建议的下拉列表框
AutoAppend = 0x2,//启用自动添加
Search = 0x4,//在完成的串中添加搜索项目,选中此项目启动搜索引擎
FilterPreFixes = 0x8,//不匹配逗号前缀,如“www.”,“http://”等
UseTab = 0x10,//使用Tab键从下拉框清单中选择
UpDownKeyDropsList = 0x20,//使用上下箭头键显示自动建议的下拉框清单
RtlReading = 0x40 //常规窗口从左到右显示文本。Windows 可以被映射显示诸如 Hebrew 或 Arabic 这样从右到左阅读的语言。通常,某个控制的文本与其父窗口文本的阅读/显示方向相同。如果设置ACO_RTLREADING,那么文本阅读方向与其父窗口文本阅读方向相反。
}
public class AutoComplete : IDisposable
{
protected IAutoComplete2 m_iAutoComp;

public AutoComplete(IntPtr hwndTextBox, string [] DataList)
{
COMEnumString sourceList = new COMEnumString();
sourceList.StringList = DataList;

Type typeAutoComplete = Type.GetTypeFromCLSID(new Guid("{00BB2763-6A77-11D0-A535-00C04FD7D062}"));

m_iAutoComp = (IAutoComplete2)Activator.CreateInstance(typeAutoComplete);

AutoCompleteOptions ACOptions = AutoCompleteOptions.AutoSuggest;
m_iAutoComp.Init(hwndTextBox, sourceList, "", "");
m_iAutoComp.SetOptions((UInt32)ACOptions);
m_iAutoComp.Enable(1);


}
public void Disable()
{
AutoCompleteOptions ACOptions = AutoCompleteOptions.None;
m_iAutoComp.SetOptions((UInt32)ACOptions);
}
public void Enable()
{
AutoCompleteOptions ACOptions = AutoCompleteOptions.AutoSuggest
|AutoCompleteOptions.AutoAppend
|AutoCompleteOptions.UpDownKeyDropsList
|AutoCompleteOptions.FilterPreFixes;
m_iAutoComp.SetOptions((UInt32)ACOptions);
}
public void Dispose()
{
Marshal.ReleaseComObject(m_iAutoComp);
}
}

public class SetComboboxAuto
{
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);

private System.Windows.Forms.ComboBox _combobox=null;
private IntPtr hCombobox;

public SetComboboxAuto(System.Windows.Forms.ComboBox thisCombo)
{
this._combobox=thisCombo;
this._combobox.DropDownStyle=System.Windows.Forms.ComboBoxStyle.DropDown;
this._combobox.Leave+=new System.EventHandler(this.comboboxLeave);
hCombobox=FindWindowEx(this._combobox.Handle,new IntPtr(0),"Edit",null);
new AutoComplete(hCombobox, this.getListItem(this._combobox)).Enable();
}
public string[] getListItem(System.Windows.Forms.ComboBox cbx)
{
string [] ret=new string[cbx.Items.Count];
for(int i=0;i<cbx.Items.Count;i++)
{
ret[i]=cbx.Items[i].ToString();
}
return ret;
}
private void comboboxLeave(object sender,System.EventArgs e)
{
int sel=this._combobox.FindStringExact(this._combobox.Text);
if (sel>=0) this._combobox.SelectedIndex=sel;
else
{
if (this._combobox.Text!="")
{
this._combobox.Text="";
this._combobox.Select();
System.Windows.Forms.MessageBox.Show(";(");
}
}
}

}
}
salmon230 2005-08-22
  • 打赏
  • 举报
回复
这个只要汉字拼音首字母就行了,网上有例子
TechEye 2005-08-22
  • 打赏
  • 举报
回复
楼主用 google 找一下关键字:C# 汉字拼音检索
lyb_abiandbel 2005-08-22
  • 打赏
  • 举报
回复
http://geekswithblogs.net/mchroman/archive/2005/07/25/48203.aspx
Thinkerwang 2005-08-22
  • 打赏
  • 举报
回复
我也是这个问题,差不多.有好的简单点的例子吗?
ljp3000 2005-08-21
  • 打赏
  • 举报
回复
就是说 自动完成 功能 了?
http://geekswithblogs.net/mchroman/archive/2005/07/25/48203.aspx

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧