1


0

バックスペースを抑制し、MaskedTextboxのキーを削除する

質問は簡単です:どうやってそれをするのですか? 私はいくつかのMaskedTextboxをいくつかの間接的なユーザーアクションで埋めています(そのため直接値を入力するのではありません)。 テキストボックス内のテキストは、入力がマスクによって拒否されているときは赤色になります。 これまでのところ罰金。

しかし、私はエンドユーザーが直接ボックスを編集できるようにしたくありません。 だから、私は次のコードを追加しました:

    private void HandleMaskedTextBoxKeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = true;
    }

    private void HandleMaskedTextBoxKeyDown(object sender, KeyEventArgs e)
    {
        e.Handled = true;
        e.SuppressKeyPress = true;
    }

ほとんどの文字は扱われますが、バックスペースとデリートキーはそうではありません。それらのキーを押すとテキストは消えます。 これらのキーもどのように処理できますか?

(別のオプションは、ボックスの `+ readonly `プロパティを ` true `に設定することですが、入力が拒否されるとテキストは赤くなりません。 ` MaskInputRejected +`イベントで赤色を強制しようとしましたが、これもうまくいきませんでした。)

2 Answer


1


`+ MaskedTextBox `の ` ReadOnly `プロパティを ` true `に設定することをお勧めします。 しかし、 ` MaskInputRejected `イベントを処理する代わりに、次のように ` TypeValidationCompleted +`イベントを使用する必要があります。

private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e) {
  maskedTextBox1.ForeColor = e.IsValidInput ? Color.Black : Color.Red;
}

コードで `+ MaskedTextBox `の値を変更していると思うので、 ` TextChanged +`イベントを処理して、次のような検証をトリガーする必要があります。

private void maskedTextBox1_TextChanged(object sender, EventArgs e) {
  maskedTextBox1.ValidateText();
}

最後に(そしてこれがキーです)、 `+ MaskedTextBox `は読み取り専用になるので、 ` BackColor `と ` ForeColor `プロパティを ` Color.White `と ` Color.Black +に戻す必要があります。 `それぞれ、しかし、あなたはコードで、例えばフォームのコンストラクタでそれをしなければなりません…​

maskedTextBox1.BackColor = Color.White;
maskedTextBox1.ForeColor = Color.Black;

たくさんある場合は、 `+ MasketTextBox +`を継承する新しいコントロールを作成し、それらの値をオーバーライドすることをお勧めします。


0


あなたはrichtextboxを使うことができます。 読み取り専用をtrueに設定し、コードbeindで文字をマスクします。

それが役立つことを願っています。 RG