C#中Winfrom默認(rèn)輸入法的設(shè)置方法
本文實(shí)例講述了C#中Winfrom默認(rèn)輸入法的設(shè)置方法。分享給大家供大家參考。具體分析如下:
在WINFORM中我們經(jīng)常遇到文本輸入框中輸入法被禁用或老是變?nèi)禽斎敕ǖ葐栴},經(jīng)查閱相關(guān)資料,現(xiàn)小結(jié)如下:
一、Control.ImeMode 屬性:獲取或設(shè)置控件的輸入法編輯器 (IME) 模式。
(1)由于窗體屬性繼承關(guān)系,如果你的WINFORM窗體中大部分需要設(shè)置為輸入法有效狀態(tài),可以設(shè)置為FORM的ImeMode屬性為On.
(2)如果需要某些TextBox為輸入法有效,則使用ImeMode.On
(3)如果需要設(shè)置整個(gè)窗體的輸入法全部為半角,可以使用以下代碼:
#region 修正輸入法全角/半角的問題
//聲明一些API函數(shù)
[DllImport("imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hwnd);
[DllImport("imm32.dll")]
public static extern bool ImmGetOpenStatus(IntPtr himc);
[DllImport("imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);
[DllImport("imm32.dll")]
public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
[DllImport("imm32.dll")]
public static extern int ImmSimulateHotKey(IntPtr hwnd, int lngHotkey);
private const int IME_CMODE_FULLSHAPE = 0x8;
private const int IME_CHOTKEY_SHAPE_TOGGLE = 0x11;
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
IntPtr HIme = ImmGetContext(this.Handle);
//如果輸入法處于打開狀態(tài)
if (ImmGetOpenStatus(HIme))
{
int iMode = 0;
int iSentence = 0;
//檢索輸入法信息
bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);
if (bSuccess)
{
//如果是全角,轉(zhuǎn)換成半角
if ((iMode & IME_CMODE_FULLSHAPE) > 0)
ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE);
}
}
}
#endregion 修正輸入法全角/半角的問題
注意:需要引用以下命名空間:using System.Runtime.InteropServices;
(4)對(duì)于僅用于輸入數(shù)值的 TextBox 控件,ImeMode 屬性通常設(shè)置為 ImeMode.Off。對(duì)于 Form 類,ImeMode 屬性值設(shè)置為 ImeMode.NoControl。
(5)不直接支持輸入方法編輯器或允許從 IME 直接輸入的大多數(shù)類將此屬性的值設(shè)置為 NoControl。
重要事項(xiàng):
除非 ImeMode 已經(jīng)以編程方式設(shè)置為 ImeMode.Disable,否則用戶能夠以交互方式更改它。在前一種情況下,用戶將無法使用 IME。
二、ImeMode各屬性的含義:
ImeMode 枚舉:指定一個(gè)值,該值是用來確定在選定了對(duì)象時(shí)該對(duì)象的輸入法編輯器 (IME) 的狀態(tài)。
以下是微軟的解釋:
| |
成員名稱 | 說明 |
|---|---|---|
| Alpha | 字母數(shù)字單字節(jié)字符 (SBC)。此設(shè)置僅對(duì)朝鮮語和日語 IME 有效。 |
|
| AlphaFull | 字母數(shù)字雙字節(jié)字符。此設(shè)置僅對(duì)朝鮮語和日語 IME 有效。 |
|
| Close | |
|
| Disable | IME 被禁用。如果使用此設(shè)置,則用戶無法從鍵盤打開 IME,而且 IME 浮動(dòng)窗口處于隱藏狀態(tài)。 |
|
| Hangul | 朝鮮文 SBC。此設(shè)置僅對(duì)朝鮮語 IME 有效。 |
|
| HangulFull | 朝鮮文 DBC。此設(shè)置僅對(duì)朝鮮語 IME 有效。 |
|
| Hiragana | 平假名 DBC。此設(shè)置僅對(duì)日語 IME 有效。 |
|
| Inherit | 繼承父控件的 IME 模式。 |
|
| Katakana | 片假名 DBC。此設(shè)置僅對(duì)日語 IME 有效。 |
|
| KatakanaHalf | 片假名 SBC。此設(shè)置僅對(duì)日語 IME 有效。 |
|
| NoControl | 無(默認(rèn))。 |
|
| Off | IME 已關(guān)閉。此模式指示 IME 已關(guān)閉,這意味著該對(duì)象的行為方式與英語輸入模式相同。此設(shè)置僅對(duì)日語、簡體中文和繁體中文 IME 有效。 |
|
| On | IME 已打開。此值指示 IME 已打開,可以輸入中文或日語特定的字符。此設(shè)置僅對(duì)日語、簡體中文和繁體中文 IME 有效。 |
備注:
輸入法編輯器 (IME) 允許用戶輸入和編輯中文、日語和朝鮮語字符。IME 是用于編寫中文、日語和朝鮮語腳本的基本組件。這些書寫體系具有的字符比可為常規(guī)鍵盤編碼的字符要多。這些語言的 IME 使用描述單個(gè)字符或成組字符的基字符序列,以便允許您輸入范圍較廣的一組字符。基字符可以是來自朝鮮文音節(jié)的成分字母、日語漢字字符的拼音成分,或者中文字符的各種組合。
三、如果設(shè)置為合適的輸入法?
這里僅給一個(gè)例子,打擊可以舉一返三:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
public class Form1 : System.Windows.Forms.Form
{
RichTextBox rtb = new RichTextBox();
public Form1()
{
this.Controls.Add(rtb);
rtb.Dock = DockStyle.Fill;
this.InputLanguageChanged += new InputLanguageChangedEventHandler(languageChange);
}
private void languageChange(Object sender, InputLanguageChangedEventArgs e)
{
// If the input language is Japanese, set the initial IMEMode to Katakana.
if (e.InputLanguage.Culture.TwoLetterISOLanguageName.Equals("ja"))
{
rtb.ImeMode = System.Windows.Forms.ImeMode.Katakana;
}
}
public static void Main(string[] args)
{
Application.Run(new Form1());
}
}
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
如何:對(duì)Windows 窗體控件進(jìn)行線程安全調(diào)用
使用多線程提高 Windows 窗體應(yīng)用程序的性能時(shí),必須注意以線程安全方式調(diào)用控件。2007-03-03
C#中圖片旋轉(zhuǎn)和翻轉(zhuǎn)(RotateFlipType)用法分析
這篇文章主要介紹了C#中圖片旋轉(zhuǎn)和翻轉(zhuǎn)(RotateFlipType)用法,實(shí)例分析了C#圖片旋轉(zhuǎn)及翻轉(zhuǎn)Image.RotateFlip方法屬性的常用設(shè)置技巧,需要的朋友可以參考下2015-06-06

