2009-06-18 15 views
1

質問は簡単です:どのようにするのですか? 私はいくつかの間接的なユーザアクションによって満たされた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; 
    } 

そして、ほとんどの文字が処理されている間、バックスペースを、削除キーはありません。これらのキーを押したときにテキストが消えます。それらのキーはどのように扱うことができますか?

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

答えて

1

MaskedTextBoxReadOnlyプロパティをtrueに設定することをお勧めします。私はあなたがコードによってMaskedTextBoxの値を変更していると思いますので、あなたはまたにTextChangedイベントを処理する必要があります

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

:しかし、その代わりにMaskInputRejectedイベントを処理するのは、このようなTypeValidationCompletedイベントを使用する必要がありますMaskedTextBoxのみが読み込まれますので、あなたがColor.WhiteColor.Black respectivに戻っBackColorForeColorプロパティを設定することをお勧めします、最後に

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

(これはキーです):このような検証をトリガーエリー、しかし、あなたはあなたがそれらの多くを持っている場合、私はあなたがMasketTextBoxから継承する新しいコントロールを作成することをおすすめ

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

...例えば、フォームのコンストラクタで、コードでそれを行う必要があるでしょうそれらの値をオーバーライドします。

+0

ただし、興味深い解決策は、maskedTextBox1_TypeValidationCompletedはmaskedTextBox1.ValidateText()の後に起動されないため、色はまだ赤色になりません。 – dbaw

+0

実際には、(反射板を使って見ましたが)BackColorをColor.Whiteに設定しましたか?あなたがそれをしなければうまくいかないのは事実だから...なぜ、私は分かりません! –

+0

テキストボックスにValidatingTypeプロパティを設定する必要がありました。それは今働きます!ありがとう。 – dbaw

0

リッチテキストボックスを使用することができます。読み取りのみをtrueに設定し、charindをコードbeindでマスクします。

私は役立つことを願っています。 RG

関連する問題