对AutoCompleteTextBox的扩展

对AutoCompleteTextBox的扩展
发布者:IT168  日期: 2008-05-13 00:00:00 浏览次数:61 (共有0条评论) 查看评论 | 我要评论
 



  主要扩展的就是对汉字拼音及数据表(DataTable)的绑定,添加了MyConvert类实现了从汉字到拼音的转化。




  Binding主要代码
//数据绑定方式
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("py");
dt.Rows.Add(new object[]{ 1, "陈树林", "csl" });
//.....
this.coolTextBox1.Bind(dt, "name", "id", "py");
//自行添加方式
this.coolTextBox1.Items.Add(new AutoCompleteEntry("周杰伦","2", "zhoujielun", "ZJL", "周杰伦"));
  下面是MyConvert类
/// <summary>
/// 汉字转拼音
/// </summary>
    public class MyConvert
{
获得一个字符串的汉语拼音首字母,如中国--ZG#region 获得一个字符串的汉语拼音首字母,如中国--ZG
/**//// <summary>
/// 获得一个字符串的汉语拼音首字母,如中国--ZG
/// </summary>
/// <param name="strText">字符串</param>
/// <returns>汉语拼音码,该字符串只包含大写的英文字母</returns> 
        public static string ChineseToShortening(string strText)
{
if (strText == null || strText.Length == 0)
return strText;
System.Text.StringBuilder myStr = new System.Text.StringBuilder();
foreach (char vChar in strText)
{
// 若是字母则直接输出 
                if ((vChar >= 'a' && vChar <= 'z') || (vChar >= 'A' && vChar <= 'Z'))
myStr.Append(char.ToUpper(vChar));
else if ((int)vChar >= 19968 && (int)vChar <= 40869)
{
// 若字符Unicode编码在编码范围则 查汉字列表进行转换输出 
                    foreach (string strList in strChineseCharList)
{
if (strList.IndexOf(vChar) > 0)
{
myStr.Append(strList[0]);
break;
}
}
}
}
return myStr.ToString();
}
private static string[] strChineseCharList =
{
"A阿啊锕嗄厑哎哀唉埃挨溾锿鎄啀捱皑凒溰嘊敳皚癌毐昹嗳矮蔼躷噯藹譪霭靄艾伌爱砹硋隘嗌塧嫒愛碍暧瑷僾壒嬡懓薆曖璦鴱皧瞹馤鑀鱫安侒峖桉氨庵谙萻腤鹌蓭誝鞌鞍盦馣鮟盫韽啽雸垵"   ,
//………………………. 
            "Z左佐繓作坐阼岝岞怍侳柞祚胙唑座袏做葄蓙飵糳咗"
};
#endregion
得到GB2312汉字的拼音,如中国ZhongGuo#region 得到GB2312汉字的拼音,如中国ZhongGuo
//01-09区为特殊符号。
//16-55区为一级汉字,按拼音排序。
//56-87区为二级汉字,按部首/笔画排序。
// 每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。
//“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。
//例如“啊”字在大多数程序中,会以0xB0A1储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。
        private static readonly string[][] _Allhz =new string[][]
{
new string[]{"A","啊阿呵吖嗄腌锕錒"},
new string[]{"Ai","爱矮挨哎碍癌艾唉哀蔼隘埃皑呆嗌嫒瑷暧捱砹嗳锿霭乂乃伌僾儗凒剀剴叆呃呝啀嘊噫噯堨塧壒奇娭娾嬡嵦愛懓懝敱敳昹曖欬欸毐溰溾濭烠焥璦皚皧瞹硋磑礙絠薆藹諰譪譺賹躷醷鎄鑀閡阂阨阸隑靄靉餲馤騃鯦鱫鴱崖"},
//………………………..
            new string[]{"Zuo","做作坐左座昨凿琢撮佐笮酢唑祚胙怍阼柞乍侳咗岝岞挫捽柮椊砟秨稓筰糳繓苲莋葃葄蓙袏諎醋鈼鑿飵嘬阝"}
};
public static string ChineseGB2312ToSpell(string str)
{
if (str == null)
return null;
Encoding ed = Encoding.GetEncoding("GB2312");
if (ed == null)
throw (new ArgumentException("没有找到编码集GB2312"));
int bh = 0;
char[] charary = str.ToCharArray();
byte[] bAry = new byte[2];
StringBuilder rtnSb = new StringBuilder();
for (int i = 0; i < charary.Length; i++)
{
bAry = ed.GetBytes(charary[i].ToString());
if (bAry.Length == 1)
{
rtnSb.Append(charary[i]);
continue;
}
bh = bAry[0] - 0xA0;
if (0x10 <= bh && bh <= 0x57)//是gb2312汉字
                {
bool isFind = false;
for (int j = 0; j < _Allhz.Length; j++)
{
if (_Allhz[j][1].IndexOf(charary[i]) != -1)
{
rtnSb.Append(_Allhz[j][0]);
isFind = true;
break;
}
}
if (!isFind)
rtnSb.Append(charary[i]);
}
else
rtnSb.Append(charary[i]);
}
return rtnSb.ToString();
}
#endregion
}
  取值去拼音代码
string res = "名字:" + this.coolTextBox1.Text + "\r\n值:" + this.coolTextBox1.Value;
string sort = MyConvert.ChineseToShortening(coolTextBox1.Text);
string all = MyConvert.ChineseGB2312ToSpell(coolTextBox1.Text);
string res = "拼音简写:" + sort + "\r\n全拼:" + all;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值