質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

textbox

HTMLの<input type="text">で生成されるtextboxに関するタグです。

Q&A

2回答

9631閲覧

テキストボックスのIMEモードを個別に設定したいです

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

textbox

HTMLの<input type="text">で生成されるtextboxに関するタグです。

0グッド

0クリップ

投稿2021/03/18 06:45

前提・実現したいこと

テキストボックスのIMEモードを個別に設定したいです。

現在、
TextBox1のIMEModeをひらがな
TextBox2のIMEModeを半角カタカナに設定し
TextBox1の入力内容のフリガナをTextBox2に入力してもらうような設計にしています。

しかし、実際に動かすとどちらもIMEModeがひらがなになってしまいます。
調べてみるとOSの設定を変更することで切り替えが可能になるらしいのですが、
できるだけOSに依存したくないです。

また、Enter時、もしくはTextBox2から離れるときに変換して反映することも考えたのですが
入力している間はひらがなが出てしまい、違和感があります。

解決方法をご教授いただきたいです。
言語はC#で、.NETFrameWork4.8を使用しています。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

投稿2021/03/18 06:53

編集2021/03/18 06:56
sinya0320

総合スコア211

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/03/18 06:58

回答ありがとうございます。 Windows Forms です。 教えていただいたサイトでも、OSの設定を変更することで対処しているようですが 今回はOSの設定を変更しない方法を探しています。
Zuishin

2021/03/19 03:57

退会する前にもうちょっとよく読めばいいのに。 > しかし、InputScope クラスは、WPF、Windows ストアアプリでしか使えない為、Windows Formアプリでは使用できません。 > (Windows Form はもう使うな!という事でしょうか (涙) ) WPF や UWP をを使えばいいだけ。
dodox86

2021/03/19 05:38

また、質問を閉じずの自分都合の退会ですか。なぜ、こうも自分のメリットばかり考えるのか。質問を読んで様々に考えを巡らした方々のことはまったく考えていないのでしょう。こんな質問が本当、増えました。
guest

0

あら。退会しちゃったのか。
折角書いてみたので、後のために晒しておきます。

軽くしか試していないので、ダメなところあるかも知れないです。
それっぽくは動きます。

使う時のクラス名は適宜変えてくださいね。

C#

1using System; 2using System.Runtime.InteropServices; 3using System.Windows.Forms;

C#

1public class TextBoxEx : TextBox 2{ 3 [DllImport("User32.dll")] 4 static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 5 [DllImport("imm32.dll")] 6 static extern IntPtr ImmGetDefaultIMEWnd(IntPtr hWnd); 7 8 const int WM_IME_CONTROL = 0x283; 9 const int IMC_GETCONVERSIONMODE = 1; 10 const int IMC_SETCONVERSIONMODE = 2; 11 const int IMC_GETOPENSTATUS = 5; 12 const int IMC_SETOPENSTATUS = 6; 13 14 const int IME_CMODE_NATIVE = 1; 15 const int IME_CMODE_KATAKANA = 2; 16 const int IME_CMODE_FULLSHAPE = 8; 17 const int IME_CMODE_ROMAN = 16; 18 19 const int CMode_Hiragana = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE | IME_CMODE_NATIVE; 20 const int CMode_Katakana = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE | IME_CMODE_KATAKANA | IME_CMODE_NATIVE; 21 const int CMode_KatakanaHarlf = IME_CMODE_ROMAN | IME_CMODE_KATAKANA | IME_CMODE_NATIVE; 22 const int CMode_AlphaFull = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE; 23 24 private ImeMode ime; 25 26 protected override ImeMode ImeModeBase 27 { 28 get { return base.ImeModeBase; } 29 set 30 { 31 ime = value; 32 base.ImeModeBase = value; 33 } 34 } 35 36 protected override void OnEnter(EventArgs e) 37 { 38 base.OnEnter(e); 39 40 ImeMode = ime; 41 42 var imwd = ImmGetDefaultIMEWnd(Handle); 43 44 switch (ImeMode) 45 { 46 case ImeMode.On: 47 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETOPENSTATUS, new IntPtr()); 48 break; 49 case ImeMode.Off: 50 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETOPENSTATUS, IntPtr.Zero); 51 break; 52 case ImeMode.Disable: 53 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETOPENSTATUS, IntPtr.Zero); 54 break; 55 case ImeMode.Hiragana: 56 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_Hiragana); 57 break; 58 case ImeMode.Katakana: 59 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_Katakana); 60 break; 61 case ImeMode.KatakanaHalf: 62 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_KatakanaHarlf); 63 break; 64 case ImeMode.AlphaFull: 65 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)CMode_AlphaFull); 66 break; 67 case ImeMode.Alpha: 68 SendMessage(imwd, WM_IME_CONTROL, (IntPtr)IMC_SETCONVERSIONMODE, (IntPtr)IME_CMODE_ROMAN); 69 break; 70 default: 71 break; 72 } 73 } 74}

投稿2021/03/19 05:20

sinya0320

総合スコア211

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問