私は銀色のWebアプリケーションで作業しています。これは、SMSを送信するモジュールと対話します。私はテキストを160に制限し、カウンタを表示したいと思います。私はこのようにしました:KeyDownでのバックスペースの検出
public partial class SendSMSView
{
public SendSMSView()
{
InitializeComponent();
ApplyTheme();
}
protected void tbMessage_KeyDown(object sender, KeyEventArgs e)
{
count = 160 - this.tbMessage.Text.Length;
this.lblCount.Content = count.ToString();
}
}
これは、バックスペースと削除以外のすべてのキーで問題なく動作します。もちろん、このように機能するように作られています。私はもっとこの上掘って、私は次のコードスニペットを追加して上書きKeyDownイベントを試してみました:私はすべてのキーストロークが登録取得は、OnKeyDown機能で
public class CustomTextBox : TextBox
{
public CustomTextBox(): base()
{
}
protected override void OnKeyDown(KeyEventArgs e)
{
e.handler=false;
base.OnKeyDown(e);
//this place
}
}
を。ここではハンドラをfalseに設定するとヘルプが表示されず、バックスペースでtbMessage_KeyDowをトリガすることはできません。
私は何とかtbMessage_KeyDow関数をバックスペースに対して強制的にここから//呼び出す必要があります。
MSDNを検索して、IsInputKeyをtrueに戻すようにオーバーライドして、onKeyDownにも応答するようにすることができますが、MyフレームワークにはIsInputKeyもPreviewKeyPressもありません。バックスペースキーを入力キーとして登録するか、tbMessage_KeyDowを呼び出すための回避策がありますか?助けてください。
'this.tbMessage.Text.Length'バックスペースを使用しているので、削除は文字列' Text'に反映されます。それとも別の意味ですか? – Stefan
keydownの代わりに[textchanged](http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged%28v=vs.95%29.aspx)イベントを使用しないでください。変更されるたびにテキストボックスの内容を数えるだけです – weberik
ありがとうございます。 TextChangedはちょっとした手間をかけて作業しました。 – whizzyifti