前提・実現したいこと
分かりづらいタイトルで申し訳ありません。
長文失礼いたします。
TextBoxの行数に制限をかけるため、コードでBackSpaceキーの入力を行いたいです。
TextBoxの現状としては以下の通りです。
・行数は最大6行
・FontSizeは変更しない
・最大文字数は102文字
・Textは折り返す
・最大行数を超えるEnterキーでの改行を制限
最大行数を超えるような改行は起きないのですが
下図のように6行目がいっぱいの状態で文字を入力すると
折り返され7行目に文字が表示されてしまいます
なので、6行目でテキストの折り返しが起きた場合にコードでBackSpaceキーの入力を行い、入力された文字を消去したいです。
WPF –キーの送信|michlGのブログ
WPFアプリケーションでSendKeys.Sendメソッドを使用する
↑これらのサイトを参考に以下のコードを作成したのですが、動作自体は実行されているものの、なにも起きませんでした。
BackSpaceキーの入力がうまく行われない原因、もしくはより良い行数制限の方法がもしあればご教授いただけると幸いです。
該当のソースコード
XAML
1<TextBox x:Name="TextBox"TextWrap="Wrap" AcceptsReturn="True" MaxLength="102" 2 TextWrapping="Wrap"PreviewKeyDown="TextBoxKeyDown"PreviewKeyUp="TextBoxKeyDown"/>
C#
1 2int MaxLine =6; 3 4// TextBoxに改行制限をかける 5 private void TextBoxKeyDown(object sender, KeyEventArgs e) 6 { 7 if(this.InputMyALittleExcitedText.LineCount == MaxLine) 8 { 9 if(e.Key == Key.Enter) 10 { 11 e.Handled = true; 12 } 13 14 } 15 else if (this.InputMyALittleExcitedText.LineCount > MaxLine) 16 { 17 SendKeys.Send(Key.Back); 18 } 19 } 20 21 public static class SendKeys 22 { 23 /// <summary> 24 /// Sends the specified key. 25 /// </summary> 26 /// <param name="key">The key.</param> 27 public static void Send(Key key) 28 { 29 if (Keyboard.PrimaryDevice != null) 30 { 31 if (Keyboard.PrimaryDevice.ActiveSource != null) 32 { 33 var e1 = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Down) { RoutedEvent = Keyboard.KeyDownEvent}; 34 InputManager.Current.ProcessInput(e1); 35 } 36 } 37 } 38 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/30 09:01