|
皆様、回答ありがとうございます。
教えていただいたサンプルをみたりして確認用の
サンプルを作っていじってみました。
その結果から、IMEがOFFの場合は
PreviewTextInputで「textbox1.text+e.text」が内容と一致。
IMEがONで入力確定した場合は
PreviewTextInputで「textbox1.text」が内容と一致。
以上より、
PreviewTextInputのイベントのメソッドで
if (InputMethod.Current.ImeState == InputMethodState.Off)
{
Console.WriteLine(textBox1.Text + e.Text);
}
else
{
Console.WriteLine(textBox1.Text);
}
で行けるかと思ったんですが、「DELETEキー」や「貼り付け」に対応してくれません。
うまくいかないモンですね・・・
貼り付けとかも、TextChangeイベントなら対応できるけど、そうすると
変換途中でもイベントに入ってきてしまうし、それだと変換途中なのか確定したのか解らないし・・・
**** 確認サンプル ****
public Window1()
{
InitializeComponent();
TextCompositionManager.AddTextInputHandler(textBox1, new TextCompositionEventHandler(TxtIn));
TextCompositionManager.AddTextInputStartHandler(textBox1, new TextCompositionEventHandler(TxtInSt));
TextCompositionManager.AddTextInputUpdateHandler(textBox1, new TextCompositionEventHandler(TxtInUp));
TextCompositionManager.AddPreviewTextInputHandler(textBox1, new TextCompositionEventHandler(PrTxtIn));
TextCompositionManager.AddPreviewTextInputStartHandler(textBox1, new TextCompositionEventHandler(PrTxtInSt));
TextCompositionManager.AddPreviewTextInputUpdateHandler(textBox1, new TextCompositionEventHandler(PrTxtInUp));
}
void TxtIn(object sender,TextCompositionEventArgs e)
{
Console.WriteLine("In:" + textBox1.Text + "@" + e.Text);
}
void TxtInSt(object sender, TextCompositionEventArgs e)
{
Console.WriteLine("St:" + textBox1.Text + "@" + e.Text);
}
void TxtInUp(object sender, TextCompositionEventArgs e)
{
Console.WriteLine("Up:" + textBox1.Text + "@" + e.TextComposition.CompositionText);
}
void PrTxtIn(object sender, TextCompositionEventArgs e)
{
Console.WriteLine("PrIn:" + textBox1.Text + "@" + e.Text);
}
void PrTxtInSt(object sender, TextCompositionEventArgs e)
{
Console.WriteLine("PrSt:" + textBox1.Text + "@" + e.Text);
}
void PrTxtInUp(object sender, TextCompositionEventArgs e)
{
Console.WriteLine("PrUp:" + textBox1.Text + "@" + e.TextComposition.CompositionText);
}
|