您可能會遇到兩種例外情況。首先,就像你描述的那樣是一個FormatException。如果輸入的字符串格式不正確,可能會發生這種情況;說它包含一個非十六進制字符,一個空格或其他東西。您遇到的另一個異常是一個溢出異常,當第一個文本框的十六進制數變爲32位整數的數字太大時。
爲了處理異常,你需要一個try catch塊。查看https://msdn.microsoft.com/en-us/library/0yd65esw.aspx瞭解更多關於try catch的信息。
一些錯誤檢查寫這更好的辦法可能看起來像下面的東西:
string input = textBox1.Text;
try
{
int Output = Convert.ToInt32(input, 16);
textBox2.Text = Output.ToString();
}
catch (FormatException)
{
MessageBox.Show("Input string is not in the correct format.");
}
catch (OverflowException)
{
MessageBox.Show("Input is too large for conversion.");
}
//Textbox1 is Input
//Textbox2 is Output
由於Shar1er80和Landepbs人士指出,你所提供的代碼不會出錯,如果你輸入的是正確的。這是您作爲程序員的工作來驗證輸入不會錯誤。您可以使用Shar1er80建議的正則表達式進行錯誤檢查,但也有其他方法。您不僅需要檢查輸入是否包含用於轉換爲十六進制的有效字符,還應該檢查長度。每個十六進制字符可以是16個可能的值之一(0-F)。將它們中的兩個放在一起會產生256個可能的值,或者恰好一個字節。 32位整數是4個字節,這意味着有效輸入的最大長度是8個字符。再多一點,整數就會溢出。
您還應該決定是否要使用帶符號的整數或無符號整數。在有符號整數中,一個位用於符號,因此您可以輸出的最大正整數是無符號整數的一半。您可以閱讀更多關於整數的內容並在https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx處簽字。
祝你好運學習C#並堅持下去!
我懷疑你的問題是當應用第一次啓動時'textBox1'是空的,並且轉換失敗。當你得到你的異常時,'input'的值是多少?使用調試器查明。 – vcsjones 2015-03-30 21:13:46