[解決済み] WPFでテキストボックスが数値入力しか受け付けないようにするにはどうしたらいいですか?
2022-02-09 06:35:16
質問
数字と小数点を受け入れたいが、符号がない。
Windows FormsのNumericUpDownコントロールを使ったサンプルを見てみましたが このサンプルはMicrosoftのNumericUpDownカスタムコントロールです。 . しかし、今のところ、NumericUpDownは(WPFでサポートされているかどうかにかかわらず)私が望むような機能を提供することはできないようなのです。私のアプリケーションの設計では、まともな神経の持ち主なら誰も矢印をいじりたくはないだろう。私のアプリケーションの文脈では、矢印は実用的な意味を持ちません。
そこで、標準的なWPFのテキストボックスが、必要な文字だけを受け入れるようにする簡単な方法を探しています。これは可能ですか?実用的ですか?
解決方法は?
プレビューテキスト入力イベントを追加します。以下のように。
<TextBox PreviewTextInput="PreviewTextInput" />
.
そして、その中に
e.Handled
テキストが許可されていない場合
e.Handled = !IsTextAllowed(e.Text);
で簡単な正規表現を使っています。
IsTextAllowed
メソッドを使用して、入力されたものを許可するかどうかを確認します。私の場合、数字、ドット、ダッシュだけを許可したいのです。
private static readonly Regex _regex = new Regex("[^0-9.-]+"); //regex that matches disallowed text
private static bool IsTextAllowed(string text)
{
return !_regex.IsMatch(text);
}
不正なデータの貼り付けを防止するために、以下のように
DataObject.Pasting
イベント
DataObject.Pasting="TextBoxPasting"
このように
こちら
(コード抜粋)。
// Use the DataObject.Pasting Handler
private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
{
if (e.DataObject.GetDataPresent(typeof(String)))
{
String text = (String)e.DataObject.GetData(typeof(String));
if (!IsTextAllowed(text))
{
e.CancelCommand();
}
}
else
{
e.CancelCommand();
}
}
関連
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] WPFテキストボックスの多行化
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] 数字しか入力できないテキストボックスの作り方を教えてください。
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】「namespace」なのに「type」のように使われる。