2016-04-13 6 views
0

1文字を削除し、ユーザがテキストボックスを押すのを控除したい場合は-とします。私は、ユーザーがイベントkey_pressで二度マイナスキーを押していないことを検証:文字列中の途中または末尾の文字をマイナス( - )で削除する方法#

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.') && (e.KeyChar != '-')) 
{ 
    e.Handled = true; 
} 

// only allow one minus - 

if (e.KeyChar == '-' && ((sender as TextBox).Text.IndexOf('-') > -1)) 
{ 
    e.Handled = true; 
} 

ユーザーが文字列の途中または最後にマイナス記号キーを押したときに問題があります。

1000 - 00 < ---

2000.00- <無効---

-1000.00 <無効---有効

どのように私はマイナス記号があることを確認することができます。たとえばテキストボックスの内容を開始しますか?

+1

なぜ値をダブルに変換しようとしないのですか? – Wjdavis5

+0

入力が無効であることをユーザーに警告するべきではありませんか?ユーザーが1000または-1000を意味しましたか?あなたはどのようにしてどのように決定できますか? "どうすれば" == "間違っていれば責任を引き受ける" –

+0

こんにちは、私は10進数に変換しようとしますが、ユーザーが1つの数量を書き込むと「フォーマット例外」を表示します。 –

答えて

0

このINT minusCount = 0のようなクラスレベルの変数を宣言し、この

ようにそれを使用します。

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.') && (e.KeyChar != '-')) 
{ 
    e.Handled = true; 
} 

// only allow one minus - 

//put condition if it is zero than only allow one minus sign 
if (e.KeyChar == '-' && ((sender as TextBox).Text.IndexOf('-') > -1) && minusCount==0) 
{ 
    e.Handled = true; 
    //over here increment that variable 
    minusCount = minusCount+1; 
    //for handling it in middle other than zero position 
    if(textbox.Text.IndexOf("-")>1) 
    { 
     textbox.Text=textbox.Text.Replace("-",""); 
    } 
} 
+0

問題InstanceOfで...これは名前空間System.Objectにありますか? –

+0

申し訳ありませんが、私はインデックスを書いていますが、代わりにinstanceofを書くのはちょうどタイプミスです – rashfmnb

+0

検査時計IndexOf( " - ")> 0、 にマイナス記号が最初であるため、@ rashfmnbありがとうございます –

0
if (e.KeyChar == '-' && ((sender as TextBox).Text.Length > 1)) 

これは、最初に1つだけのダッシュを可能にします。たぶん、あなたが最初のテキストをトリミングする必要があります...あなたの二if

+0

これは、 [ホーム]ボタンを押し、値を負にしてみてください。 – dasblinkenlight

+0

OK、あなたが正しいです - あなたの答えは良いです:-) – Markus

+0

もっと一般的にしたい場合は、あなたの答えを変えることができるようにコメントしました。 – dasblinkenlight

0

問題は、あなたが一度にチェックがsenderは(すなわちTextBox)まだマイナスを持っていないことです。最初にマイナスのテキストを作成し、それを検証して決定を下す必要があります。

if (e.KeyChar == '-') { 
    var tb = sender as TextBox; 
    // Obtain the text after the modification 
    var modifiedText = tb.Text.Insert(tb.SelectionStart, "-"); 
    // There will be at least one '-' in the text box - the one you just inserted. 
    // Its position must be 0, otherwise the string is invalid: 
    e.Handled = modifiedText.LastIndexOf("-") != 0; 
} 
+0

ですが、イベントkey_pressは "modified modifiedText.LastIndexOf(" - ")!= 0;"を返します。 voidメソッドです –

+0

@RafaelSaavedra私は 'e.Handled'をブール値に設定することを意図していました。 – dasblinkenlight

+0

@RafaelSaavedra変更を試しましたか? – dasblinkenlight

関連する問題