欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

winform 實現(xiàn)控制輸入法

 更新時間:2015年08月24日 17:57:18   投稿:hebedich  
在工作中遇到這樣一個問題,在系統(tǒng)使用過程中,輸入法會變灰導致無法使用輸入法輸入文字,就好像輸入法被禁用了沒有啟用似的。對此,在這里做個備錄

這里文章寫出來并不是為了炫耀什么,只是覺得發(fā)現(xiàn)些好東西就分享出來而已,同時也做個記錄,方便以后查找

開始正文

1、先介紹本文會用到的windows的API,網(wǎng)上有很詳細的資料,我這里就只簡要說明一下

  ImmGetContext(IntPtr hwnd):獲取當前正在輸入的窗口的輸入法句柄

  ImmSetOpenStatus(IntPtr himc, bool b):設置輸入法的狀態(tài)

  InputLanguage類:提供方法和字段以管理輸入語言;這是winform里面自帶的輸入法管理類,msdn上有詳細資料

2、比如本系統(tǒng)安裝有兩個輸入法:搜狗拼音 和 智能 ABC(注意:智能 ABC中間有個空格,用下劃線就是要明確對比出來)。

3、使用InputLanguage類來顯示指定的輸入法。

  思路很簡單:先獲取到操作系統(tǒng)中安裝的所有輸入法列表,然后循環(huán)列表,比對指定的輸入法名稱(名稱可以設置在配置文件中,安裝的時候,根據(jù)不同人的需要配置成不同的輸入法),然后把找到的輸入法設為當前輸入法,代碼如下:

      //設置“搜狗拼音”為當前輸入法
      foreach (InputLanguage item in InputLanguage.InstalledInputLanguages)
      {
        if (item.LayoutName.Contains("搜狗拼音"))
        {
          InputLanguage.CurrentInputLanguage = item;
          break;
        }
      }
      //設置“智能 ABC”為當前輸入法
      foreach (InputLanguage item in InputLanguage.InstalledInputLanguages)
      {
        if (item.LayoutName.Contains("智能 ABC"))
        {
          InputLanguage.CurrentInputLanguage = item;
          break;
        }
      }
      //設置系統(tǒng)默認輸入法為當前輸入法
      InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;

3、解決輸入法被禁用的假象。

  思路也很簡單,只需要重新激活輸入法就行了,這里就用到上面的API方法了。

  首先聲明一個委托:

    private delegate void fixImeDele();
    private fixImeDele _fixime;

  然后定義委托要實現(xiàn)的事情。

      fixime = delegate
      {
        IntPtr HIme = ImmGetContext(this.Handle);
        ImmSetOpenStatus(HIme, true);
      };

  最后執(zhí)行委托就行了哦。

this.BeginInvoke(fixime);

最后完整代碼如下:

  public partial class Form1 : Form
  {
    [DllImport("imm32.dll")]
    public static extern IntPtr ImmGetContext(IntPtr hwnd);//獲取當前正在輸入的窗口的輸入法句柄
    [DllImport("imm32.dll")]
    public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);//設置輸入法的狀態(tài)
    private delegate void fixImeDele();
    private fixImeDele fixime;
    public Form1()
    {
      InitializeComponent();
    }
    private void txt搜狗拼音_Enter(object sender, EventArgs e)
    {
      //int index = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage);
      //設置“搜狗拼音”為當前輸入法
      foreach (InputLanguage item in InputLanguage.InstalledInputLanguages)
      {
        if (item.LayoutName.Contains("搜狗拼音"))
        {
          InputLanguage.CurrentInputLanguage = item;
          break;
        }
      }
    }
    private void textBox3_Enter(object sender, EventArgs e)
    {
      //設置“智能 ABC”為當前輸入法
      foreach (InputLanguage item in InputLanguage.InstalledInputLanguages)
      {
        if (item.LayoutName.Contains("智能 ABC"))
        {
          InputLanguage.CurrentInputLanguage = item;
          break;
        }
      }
    }
    private void txt系統(tǒng)默認_Enter(object sender, EventArgs e)
    {
      //設置系統(tǒng)默認輸入法為當前輸入法
      InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
    }
    private void txtTrue_Enter(object sender, EventArgs e)
    {
      fixime = delegate
      {
        IntPtr HIme = ImmGetContext(this.Handle);
        ImmSetOpenStatus(HIme, true);
      };
      this.BeginInvoke(fixime);
    }
    private void txtFalse_Enter(object sender, EventArgs e)
    {
      fixime = delegate
      {
        IntPtr HIme = ImmGetContext(this.Handle);
        ImmSetOpenStatus(HIme, false);
      };
      this.BeginInvoke(fixime);
    }
  }

再給大家分享一個小問題的解決方法

wihform 默認的 ImeMode 值是NoControl

這不適合中文輸入.

因為例如: 你每到一個控件都要切換一下輸入法.

我們應該把父窗口 及所有子窗口 的 ImeMode 值 設置為 On

可是這樣有個問題就是 它總是全角狀態(tài).

解決辦法是:
在每個窗休的 Desinger.cs文件里找到

this.ImeMode = System.Windows.Forms.ImeMode.On;

替換為

this.ImeMode = System.Windows.Forms.ImeMode.OnHalf;

這樣就ok了.

相關(guān)文章

  • c#使用listbox的詳細方法和常見問題解決

    c#使用listbox的詳細方法和常見問題解決

    這篇文章介紹了c#使用listbox的詳細方法和常見問題解決,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • WPF實現(xiàn)動畫效果(二)之From/To/By動畫

    WPF實現(xiàn)動畫效果(二)之From/To/By動畫

    這篇文章介紹了WPF實現(xiàn)動畫效果之From/To/By動畫,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#中將DataTable轉(zhuǎn)換成CSV文件的方法

    C#中將DataTable轉(zhuǎn)換成CSV文件的方法

    DataTable用于在.net項目中,用于緩存數(shù)據(jù),DataTable表示內(nèi)存中數(shù)據(jù)的一個表,在.net項目中運用C#將DataTable轉(zhuǎn)化為CSV文件,接下來通過本文給大家提供一個通用的方法,感興趣的朋友可以參考下
    2016-10-10
  • C#文字換行的實現(xiàn)方法

    C#文字換行的實現(xiàn)方法

    這篇文章主要介紹了C#文字換行的實現(xiàn)方法,通過自定義函數(shù)實現(xiàn)針對特定字符串的換行長度處理,是比較實用的技巧,對于C#的深入學習具有一定的借鑒價值,需要的朋友可以參考下
    2014-12-12
  • C#手工雙緩沖技術(shù)用法實例分析

    C#手工雙緩沖技術(shù)用法實例分析

    這篇文章主要介紹了C#手工雙緩沖技術(shù)用法,實例分析了手工雙緩沖技術(shù)的實現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • C#自定義事件模擬風吹草搖擺效果

    C#自定義事件模擬風吹草搖擺效果

    這篇文章主要介紹了C#自定義事件模擬風吹草搖擺效果,草地上每一顆草都監(jiān)聽HoverTreeWindEvent事件,根據(jù)風向(WindDdirection)調(diào)整姿態(tài)。需要的朋友可以參考下
    2017-08-08
  • 解決用Aspose.Words,在word文檔中創(chuàng)建表格的實現(xiàn)方法

    解決用Aspose.Words,在word文檔中創(chuàng)建表格的實現(xiàn)方法

    本篇文章是對利用Aspose.Words,在word文檔中創(chuàng)建表格的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#?wpf實現(xiàn)控件刷新的示例代碼

    C#?wpf實現(xiàn)控件刷新的示例代碼

    這篇文章主要為大家詳細介紹了C#?wpf實現(xiàn)控件刷新的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去

    C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去

    這篇文章主要介紹了C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C#詞法分析器之詞法分析的使用詳解

    C#詞法分析器之詞法分析的使用詳解

    本篇文章介紹了,C#詞法分析器之詞法分析的使用詳解。需要的朋友參考下
    2013-05-05

最新評論