2个按钮  1个英文输入法  1个中文输入法   单击英文切换到英文输入法,,,每次单击中文输入法 都在系统的中文输入法之间切换,,,没分了 只有37分,,,跪求高手了!!!

解决方案 »

  1.   


    using System; 
    using System.Runtime.InteropServices; 
    using System.Collections; 
    using Microsoft.Win32;namespace Screen 

    /// <summary> 
    /// Ime 的摘要说明。 
    /// 实现本地化输入法 
    /// 参考Delphi中的实现 
    /// </summary> 
    public class Ime 
    {[DllImport("user32")] 
        private static extern uint ActivateKeyboardLayout(uint hkl, uint Flags); 
    [DllImport("user32")] 
    private static extern uint LoadKeyboardLayout(string pwszKLID,uint Flags); 
    [DllImport("user32")] 
    private static extern uint GetKeyboardLayoutList(int nBuff, uint[] List);private static Hashtable FImes; 
    public static uint KLF_ACTIVATE = 1;public Ime() 

    // 
    // TODO: 在此处添加构造函数逻辑 
    // 
    }//设定当前Ime,使用方法Ime.SetImeName("中文 (简体) - 拼音加加"); 
    public static void SetImeName(string ImeName) 

    //字符串形式 
    if (FImes==null) 
    GetImes(); 
    uint id = Convert.ToUInt32(FImes[ImeName]); 
    SetIme(id); 
    }public static void SetIme(uint ImeId) 

    //Id样式 
    if (ImeId>0) 
    ActivateKeyboardLayout(ImeId, KLF_ACTIVATE); 
    }//获得所有的Ime列表 
    public static Hashtable GetImes() 

    if (FImes==null) 
    FImes=new Hashtable(); 
    else 
    return FImes; 
    uint[] KbList=new uint[64]; 
    uint TotalKbLayout = GetKeyboardLayoutList(64, KbList);for (int i=0 ; i< TotalKbLayout ; i++) 

    string RegKey=String.Format("System\\CurrentControlSet\\Control\\Keyboard Layouts\\{0:X8}",KbList[i]); 
    RegistryKey rk=Registry.LocalMachine.OpenSubKey(RegKey); 
    if (rk==null) 
    continue; 
    string ImeName=(string)rk.GetValue("layout text"); 
    if (ImeName==null) 
    continue; 
    FImes.Add(ImeName, KbList[i]); 

    return FImes; 


    }参考:
      

  2.   

    http://developer.51cto.com/art/200509/4298.htm 参考这个例子!
      

  3.   

    参考
    http://blog.csdn.net/gdw_xql/archive/2006/07/13/914735.aspxhttp://www.cnblogs.com/roxy--sy/archive/2007/07/28/834373.html
      

  4.   

    切换输入法
    f​o​r​e​a​c​h ​(​I​n​p​u​t​L​a​n​g​u​a​g​e​ ​i​L​ i​n ​I​n​p​u​t​L​a​n​g​u​a​g​e​.​I​n​s​t​a​l​l​e​d​I​n​p​u​t​L​a​n​g​u​a​g​e​s​)
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​{
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ i​f ​(​i​L​.​L​a​y​o​u​t​N​a​m​e​ =​= "智​能​A​B​C")
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​{
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​I​n​p​u​t​L​a​n​g​u​a​g​e​.​C​u​r​r​e​n​t​I​n​p​u​t​L​a​n​g​u​a​g​e​ = ​i​L​;
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ b​r​e​a​k;
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​}
     ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​}
    参考:
    C#在应用程序中精确切换输入法介绍 
      

  5.   

    private void textBox1_Enter(object sender, EventArgs e)
      {
      InputLanguage il = InputLanguage.InstalledInputLanguages[0];
      InputLanguage.CurrentInputLanguage = il;
      }
      private void textBox1_Leave(object sender, EventArgs e)
      {
      InputLanguage il = InputLanguage.InstalledInputLanguages[1];
      InputLanguage.CurrentInputLanguage = il;
      }
    foreach (InputLanguage l in InputLanguage.InstalledInputLanguages)
                {
                      if (l.LayoutName.IndexOf("") > -1)                InputLanguage.CurrentInputLanguage = l; 
                }
                
      

  6.   

    这是.net2.0框架的一个漏洞,你可以下载一个.net2.0框架全角补丁!