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

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

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

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

3121閲覧

WPFのRichTextBoxでIME ON時かつInsertモード時の確定文字を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/04/09 07:16

やりたいことは、
WPFのRichTextBoxで、Insertモードで日本語を文字入力して、
確定した時の文字を取得したいです。

新規でWPFプロジェクトを作り、以下コードをコピペすれば再現できます。
(Visual Studio2017でやりました)

C#

1//MainWindow.xaml.cs 2 3public partial class MainWindow : Window 4 { 5 public MainWindow() 6 { 7 InitializeComponent(); 8 9 TextCompositionManager.AddPreviewTextInputStartHandler(this.richTxtBox, OnPreviewTextnInputStart); 10 TextCompositionManager.AddPreviewTextInputUpdateHandler(this.richTxtBox, OnPreviewTextInputUpdate); 11 TextCompositionManager.AddPreviewTextInputHandler(this.richTxtBox, OnPreviewTextInput); 12 } 13 14 protected void OnPreviewTextnInputStart(object sender, TextCompositionEventArgs e) 15 { 16 int a = 0; // ブレークポイント用 17 } 18 19 protected void OnPreviewTextInputUpdate(object sender, TextCompositionEventArgs e) 20 { 21 int a = 0; // ブレークポイント用 22 } 23 24 protected void OnPreviewTextInput(object sender, TextCompositionEventArgs e) 25 { 26 int a = 0; // ブレークポイント用 27 } 28 }

C#

1//MainWindow.xaml 2 3<Window x:Class="WpfTest.MainWindow" 4 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 5 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 xmlns:local="clr-namespace:WpfTest" 9 mc:Ignorable="d" 10 Title="MainWindow" Height="350" Width="525"> 11 <Grid> 12 <RichTextBox Name="richTxtBox"> 13 </RichTextBox> 14 </Grid> 15</Window>

上記コードを実行し、
RichTextBoxで、IMEをONにして日本語を入力すると、
各イベントのブレークポイントがひっかかります。

しかし、Insertモードにすると、ひっかからなくなります。

Insertモードでも上記イベント、
もしくは代替えとなるイベントを取得する方法はないでしょうか?

もしわかる方がいれば、教えていただけると大変助かります。
よろしくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

TextCompositionManager というのは初めて知りました。
試してみましたが、 RichTextBox.TextChanged だけ反応してくれました。

投稿2018/04/10 03:30

gaya-K

総合スコア449

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 00:40

試していただき、ありがとうございます。TextChangedで取るしかなさそうですね。もう少し回答を募集してみます。
yuki_5974

2018/11/27 08:07

PreviewKeyDownをOverRideして if(e.Key == key.Insert){ e.Handled = true; return; } でどうでしょうか。
gaya-K

2018/11/27 09:57

yuki_5974 さん それはインサートモードへ入るのを阻止してるだけではないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問