2017-02-21 63 views
-2

這是包含拋出異常的行的代碼:我工作在C#中的WinForms應用程序,並得到一個錯誤

weekhours = Convert.ToDouble(txtWeekHours.Text); 
weekendhours = Convert.ToDouble(txtWeekendHours.Text); 
weekrate = Convert.ToDouble(txtWeekRate.Text); 
weekendrate = Convert.ToDouble(txtWeekendRate.Text); 

這是異常調用堆棧的相關部分:

System.FormatException了未處理的HResult = -2146233033消息=輸入字符串的不正確的格式。
在System.Number.ParseDouble(字符串值,的NumberStyles選項的NumberFormatInfo numfmt)
在System.Convert.ToDouble(字符串值)
在Wage_Dog.Form1.btnCalculate_Click(對象發件人,EventArgs e)如C:\用戶\傑裏\桌面\我的C#APPS \工資狗啓動版\工資狗\ Form1.cs中:行48
在System.Windows.Forms.Control.OnClick(EventArgs五)

+1

向我們展示一些代碼。由此,嘗試將字符串值轉換爲十進制時出現錯誤....在Form1的第48行 – Nino

+0

您試圖「ParseDouble」的值是什麼?如果你提供了一些你的代碼,那應該會給人更多的幫助。 (編輯:我被尼諾最後一刻落敗的話) – jonifen

+0

weekhours = Convert.ToDouble(txtWeekHours.Text); weekendhours = Convert.ToDouble(txtWeekendHours.Text); weekrate = Convert.ToDouble(txtWeekRate.Text); weekendrate = Convert.ToDouble(txtWeekendRate。文本); – Jach

回答

0

您按一下按鈕,就可以驗證輸入這樣的:

double weekhours; 
if (double.TryParse(txtWeekHours.Text, out weekhours)) 
{ 
    // do something with weekhours variable which now holds double(decimal) value 
} 
else 
{ 
    //tell user he didn't enter valid number... 
    // do something with weekhours variable which now holds double(decimal) value 
} 

double weekendhours; 
if (double.TryParse(txtWeekendHours.Text, out weekendhours)) 
{ 
    // do something with weekendhours variable which now holds double(decimal) value 
} 
else 
{ 
    //tell user he didn't enter valid number for weekendhours... 
} 

//etc... 

所以,隨着您使用的方法,其中轉換的數字的字符串表示其雙精度浮點數相當於double.TryParse 。如果轉換成功,方法將返回true(和false如果失敗)。這樣你就可以控制你的代碼的流程,就像if (double.TryParse(txtWeekHours.Text, out weekhours))一樣。如果轉換成功,weekhours變量將包含雙倍(或十進制,以幫助您理解)。

+0

就我個人而言,我認爲它可能會更好的風格來扭轉條件的順序(因爲這基本上是一個「雙重否定」)。 – EJoshuaS

+0

對不起,如果我聽起來像一個假人,但我是C#的新手,仍然在找我的腳。你能用一個容易理解的例子來更詳細地說明你的意思嗎?我會很感激。 – Jach

+0

非常感謝,我的問題已經解決了我的問題!它現在完美無瑕! – Jach

2

您需要驗證用戶輸入。當他們的說法是空喜歡ToDouble轉換函數將失敗,空字符串,或者說並不代表當前文化和數字格式的雙精度的字符串。
有很多方法來實現這一目標:

  • 使用內置的Windows窗體validation features框架
  • 子類文本框,因此只接受有效號碼。重用或進行控制類各種輸入(數字,日期/時間等)
  • 是分析文本,並通知用戶當事情不能被解釋爲數字添加代碼。如果您需要多種形式,請將其封裝在圖書館中。

例如:

try 
{ 
    weekhours = Convert.ToDouble(txtWeekHours.Text); 
} 
catch(FormatException) 
{ 
    MessageBox.Show("Invalid input into the \"Week hours\" box. Enter a decimal number."); 
} 

還有一個TryParse功能對於支持Parse每一個數據類型,這將return false instead of throwing an exception上失敗解析到預期的類型的文本。

相關問題