2016-04-13 79 views
0

我想要刪除用戶在文本框中按下的一個字符減去-。我驗證該用戶沒有與事件key_press按下減號鍵兩次:如何在字符串c中刪除中間或末尾的字符( - )

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

爲什麼不嘗試將值轉換爲double值呢? – Wjdavis5

+0

你不應該只是警告用戶輸入無效嗎?用戶的意思是1000或-1000?你怎麼能決定哪個是哪個? 「如何能」==「承擔責任,如果你猜錯了」 –

+0

嗨,我嘗試轉換爲十進制但顯示錯誤「格式異常」,當用戶寫一個數量1000-.00 –

回答

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

感謝的@rashfmnb在檢查手錶IndexOf(「 - 」)> 0, ,因爲減號是第一個 –

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

這讓一開始只有一個破折號。也許你需要先修剪文字......

+0

這不會工作,如果用戶將鍵入一個數字,然後按[Home]按鈕,然後嘗試將該值設爲負值。 – dasblinkenlight

+0

好的,你是對的 - 所以你的回答很好:-) – Markus

+0

我評論過,如果你想讓它更一般化,你可以改變你的答案。 – dasblinkenlight

0

第二個if的問題在於當你檢查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不允許「return modifiedText.LastIndexOf(」 - 「)!= 0;」是無效的方法 –

+0

@RafaelSaavedra我打算把'e.Handled'設置爲一個布爾結果。 – dasblinkenlight

+0

@RafaelSaavedra你給這個改變一個嘗試嗎? – dasblinkenlight