首先,从微软官网下载安装包:http://www.microsoft.com/zh-cn/download/details.aspx?id=15251。下载后解压,安装CHSPinYinConv.msi,这个就是是汉字拼音组件。
安装完成后在VS里添加引用,分别引用:C:\Program Files()x86\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library(拼音)下的相关DLL。
网上的一般示例是这样的:
/// <summary>
/// 汉字转化为拼音首字母
/// </summary>
/// <param name="str">汉字</param>
/// <returns>首字母</returns>
public static string GetFirstPinyin(string str)
{
string r = string.Empty;
foreach (char obj in str)
{
try
{
ChineseChar chineseChar = new ChineseChar(obj);
string t = chineseChar.Pinyins[0].ToString();
r += t.Substring(0, 1);
}
catch
{
r += obj.ToString();
}
}
return r;
}
但是这个方法并没有解决多音字的问题,我将上述方法修改为如下:
/// <summary>
/// 汉字转化为拼音首字母
/// </summary>
/// <param name="str">汉字</param>
/// <returns>首字母</returns>
public List<string> GetFirstPinyin(string InputTxt)
{
List<string> listStrFirst = new List<string>();
List<string> listStrSecond = new List<string>();
List<string> listStr = new List<string>();
foreach (char obj in InputTxt)
{
try
{
ChineseChar chineseChar = new ChineseChar(obj);
for (int i = 0; i < chineseChar.Pinyins.Count(); i++)
{
if (chineseChar.Pinyins[i] != null)
{
listStrFirst.Add(chineseChar.Pinyins[i].Substring(0, 1).ToLower().ToString());
}
}
}
catch
{
listStrFirst.Add(obj.ToString());
}
listStrFirst = listStrFirst.Distinct().ToList();
if (listStrFirst.Count > 0 && listStrSecond.Count > 0)
{
listStr.Clear();
for (int i = 0; i < listStrFirst.Count; i++)
{
for (int m = 0; m < listStrSecond.Count; m++)
{
listStr.Add(listStrSecond[m] + listStrFirst[i]);
}
}
listStrSecond.Clear();
foreach (string str in listStr)
{
listStrSecond.Add(str);
}
listStrFirst.Clear();
}
else
{
foreach (string strFirst in listStrFirst)
{
listStrSecond.Add(strFirst);
}
listStrFirst.Clear();
}
}
return listStr;
}
这样会罗列出输入的汉字的首字母的所有组合,我们把罗列出来的List集合放到一个Panel中,让用户自己进行选择,这样就可以解决多音字的问题。
private void button1_Click(object sender, EventArgs e)
{
List<String> list = GetFirstPinyin(textBox1.Text);
if (list.Count > 1)
{
this.panel1.Visible = true;
for (int i = 0; i < list.Count(); i++)
{
if (list[i] != null)
{
RadioButton rb = new RadioButton();
rb.Text = list[i];
rb.AutoSize = true;
rb.Location = new System.Drawing.Point(22, 15 + i * 20);
rb.Name = "radioButton"+i;
rb.Size = new System.Drawing.Size(95, 16);
rb.TabStop = true;
rb.UseVisualStyleBackColor = true;
rb.Click += rb_Click;
this.panel1.Controls.Add (rb);
}
}
}
else
{
this.textBox2.Text = list[0];
}
}
void rb_Click(object sender, EventArgs e)
{
RadioButton rb=(RadioButton )sender ;
this.textBox2.Text = rb.Text;
this.panel1.Visible = false;
}
我上传了示例源代码,下载地址为: http://download.csdn.net/detail/esunshine1985/8957295