2012-06-13 22 views
2

我想獲得這段代碼在C#中工作,我想要做的是如果一個文本字段更新以驗證其整數(HP是一個整數)。C#抓取輸入文本並推送到一個整數

因此,通過嘗試將輸入轉換爲整數,我要麼獲得一個新的整數,併爲其設置值,或者如果失敗,它將採用先前驗證的值並將其推回到文本字段(非常多忽略輸入,更新它,現在它是一個驗證輸入)。

在我的腦海裏,這是所有的邏輯和工作,實際上它不是。請幫忙。

private void Input_HP_TextChanged(object sender, EventArgs e) 
{ 
    Try 
    { 
     HP = Convert.ToInt32(Input_HP.Text); 
    } 
    catch(Exception e) 
    { 
     Input_HP.Text = HP; 
    } 
} 

回答

3

可以try.parse使用,但是你會想將它設置爲一個臨時變量。在你的情況下,使用惠普將覆蓋你想保存的變量。

int tempInt; 
if(Int32.TryParse(Input_HP.Text, out tempint)) 
{ 
    HP = tempInt; 
} 
else 
{ 
    Input_HP.Text = HP.ToString(); 
} 
+0

這是一個很好的答案,不應該有降價! – musefan

+0

感謝工作像一個魅力(必須確保tempInt被全部使用,並關閉如果與「)」;) – Taoh

3

Int.TryParse可能是你在找什麼:

int HP; 
if (int.TryParse(Input_HP.Text, out HP)) 
{ 
    // the number is an integer at this point 
} 
+1

如果驗證失敗,而不是存儲的HP變量,這將設置文本值爲「0」。 – Tom

+0

這並沒有真正回答這個問題。 Plus @TomGarske提出了一個有效的觀點,即最終可以將HP的值覆蓋爲零,並因此丟失爲恢復無效輸入所需的原始值 – musefan

+0

感謝TryParse的輸入,這是函數I正在尋找,後來的答案有我想確保價值得到保持的效果。 – Taoh

1

如果惠普是一個整數,你不能直接把它分配給Text屬性,因爲這是String類型。這應該是一個編譯時錯誤,你應該使用.ToString()函數的代碼,這部分...

Input_HP.Text = HP.ToString(); 

當然,你應該使用這種轉化TryParse反正。我想你想要的是這樣的...

private void Input_HP_TextChanged(object sender, EventArgs e) 
{ 
    int i = 0; 
    if(int.TryParse(Input_HP.Text, out i)) 
    { 
     HP = i; 
    } 
    else 
    { 
     Input_HP.Text = i.ToString(); 
    } 
} 
相關問題