C#中Winfrom默許輸出法的設置辦法。本站提示廣大學習愛好者:(C#中Winfrom默許輸出法的設置辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中Winfrom默許輸出法的設置辦法正文
本文實例講述了C#中Winfrom默許輸出法的設置辦法。分享給年夜家供年夜家參考。詳細剖析以下:
在WINFORM中我們常常碰到文本輸出框中輸出法被禁用或總是變全角輸出法等成績,經查閱相干材料,現小結以下:
1、Control.ImeMode 屬性:獲得或設置控件的輸出法編纂器 (IME) 形式。
(1)因為窗體屬性繼續關系,假如你的WINFORM窗體中年夜部門須要設置為輸出法有用狀況,可以設置為FORM的ImeMode屬性為On.
(2)假如須要某些TextBox為輸出法有用,則應用ImeMode.On
(3)假如須要設置全部窗體的輸出法全體為半角,可使用以下代碼:
#region 修改輸出法全角/半角的成績
//聲明一些API函數
[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);
//假如輸出法處於翻開狀況
if (ImmGetOpenStatus(HIme))
{
int iMode = 0;
int iSentence = 0;
//檢索輸出法信息
bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);
if (bSuccess)
{
//假如是全角,轉換成半角
if ((iMode & IME_CMODE_FULLSHAPE) > 0)
ImmSimulateHotKey(this.Handle, IME_CHOTKEY_SHAPE_TOGGLE);
}
}
}
#endregion 修改輸出法全角/半角的成績
留意:須要援用以下定名空間:using System.Runtime.InteropServices;
(4)關於僅用於輸出數值的 TextBox 控件,ImeMode 屬性平日設置為 ImeMode.Off。關於 Form 類,ImeMode 屬性值設置為 ImeMode.NoControl。
(5)不直接支撐輸出辦法編纂器或許可從 IME 直接輸出的年夜多半類將此屬性的值設置為 NoControl。
主要事項:
除非 ImeMode 曾經以編程方法設置為 ImeMode.Disable,不然用戶可以或許以交互方法更改它。在前一種情形下,用戶將沒法應用 IME。
2、ImeMode各屬性的寄義:
ImeMode 列舉:指定一個值,該值是用來肯定在選定了對象時該對象的輸出法編纂器 (IME) 的狀況。
以下是微軟的說明:
輸出法編纂器 (IME) 許可用戶輸出和編纂中文、日語和朝鮮語字符。IME 是用於編寫中文、日語和朝鮮語劇本的根本組件。這些書寫系統具有的字符比可為慣例鍵盤編碼的字符要多。這些說話的 IME 應用描寫單個字符或成組字符的基字符序列,以便許可您輸出規模較廣的一組字符。基字符可所以來自朝鮮文音節的成份字母、日語漢字字符的拼音成份,或許中文字符的各類組合。
3、假如設置為適合的輸出法?
這裡僅給一個例子,襲擊可以舉一返三:
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());
}
}
願望本文所述對年夜家的C#法式設計有所贊助。