2016-09-01 1 views
-4

押された '小数点'キーを数字で置き換えて、いつでも '。'を返すことができます。地域の設定とは無関係です。私は、アプリケーション内のすべてではなく、1つの(特定の)TextBoxに対してのみ動作します。
独自のコントロールを作成せずにこれを行うことは可能ですか?TextBoxの押されたキーを別のCに置き換えます。

+0

は、あなたが何かを試してみました:どこでも、文字列内のコードは次のように使用することができ.文字を追加しますか?オプションは、 'textbox'に' KeyPressed'イベントを追加することです。ここでは、押されたKeyをチェックし、小数点の場合は、 '。'を追加するアクションを実行します。文字を '、'の代わりにテキストボックスに入力します。 –

+0

地域設定の意味は? –

+0

@BojanB KeyDown、KeyUp、KeyPressedを試しました。 KeyDownの場合、KeyUpでは文字を変更できません。 KeyPressedでは、 '、'は数字のアルファベットの文字ではありません – siwydym67

答えて

2

これを行うには、KeyDownイベントを処理し、有効化されたキーを押して数字の小数点以下の桁数にして、必要なだけ新しいキーを送信するだけです。

これは、以下のリンクはあなたに実際にいくつかのコードを書くのに十分なポインタ与える必要があり、非常に簡単です:「あなたいったん

を何かを書いて、あなたがすることができます遭遇する可能性のある具体的な問題について新しい質問をしてください。

1

thisをご覧ください。

イベント番号KeyDownを処理することができます。その場合は、numpadキャンセルイベントで、 '。'で新しいものを送信できます。

1

.文字をテンキーボックスに追加する可能性のある解決策(おそらく最も良い方法ではないが、うまくいくはずである)は、,キーがまだ押されている場合は、テキストボックスに,文字を追加します。

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Decimal) 
    { 
    e.SuppressKeyPress = true; 
    textBox1.Text += "."; 
    textBox1.SelectionStart = textBox1.Text.Length; 
    textBox1.SelectionLength = 0; 
    } 
} 

SuppressKeyPressは、押されたキーがテキストボックスに送信されることを防ぐことができます。次に、テキストボックスに目的の文字を追加します。 SelectionStartSelectionLengthプロパティは、カーソルをテキストボックス内の文字列の最後に移動するように設定されています。

EDIT役に立てば幸い:として

をcdkMooseは、このアプローチに欠陥を指摘し、それが望まれる場合、.文字は常に、文字列の末尾に追加されていることです

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Decimal) 
    { 
    e.SuppressKeyPress = true; 
    var caretPosition = textBox1.SelectionStart; 
    textBox1.Text.Insert(caretPosition , "."); 
    textBox1.SelectionStart = caretPosition + 1; 
    textBox1.SelectionLength = 0; 
    } 
} 
+1

キャレットの位置がテキストの最後でない場合は機能しません。私は望む結果がテキストボックス内の場所に関係なく小数点を強制することだと信じています – cdkMoose

+0

@cdkMooseそれを指摘してくれてありがとう、私は答えを修正しましたが、今このケースもカバーする必要があります –

+0

良いですね。それはそれをカバーする必要があります。 – cdkMoose

関連する問題