Facebookのあれ的なテキストボックスをつくる
Alt+Enterで改行し、Enterで別処理(送信など) するTextBoxを作ろうとしていたのだけど、
日本語入力がONになってるときの処理にかなり困ったのでメモ。
普通にやると、
変換中→Enter押下→変換確定と同時に別処理も実行
となってしまう。
この場合、TextBoxを継承して、WndProcで変換中か変換確定済みかを返す様にすればよい。
【サンプル】
class newTextBox : TextBox { //WndProcのオーバーライド protected override void WndProc(ref Message m) { //IMEの変換開始 const int WM_IME_STARTCOMPOSITION = 0x010D; //IMEの変換確定 const int WM_IME_ENDCOMPOSITION = 0x010E; switch (m.Msg) { case WM_IME_STARTCOMPOSITION: MessageBox.Show("WM_IME_STARTCOMPOSITION"); break; case WM_IME_ENDCOMPOSITION: MessageBox.Show("WM_IME_ENDCOMPOSITION"); break; } base.WndProc(ref m); } }