2013-04-25 23 views
0

我是Visual Studio和C#的新手。我創建了一個WinForms應用程序,它計算每月按揭付款,需要一個文本框(原則上),一個組合框(利率),一個需要2個單選按鈕(15和30年)的組框以及和「其他」打開用戶輸入年份的文本框的按鈕,以及單擊時執行計算的按鈕。當我進行計算時,有沒有辦法在組框中引用一個單一值,或者是否需要爲每個單選按鈕和文本框執行If語句並將其放入我的button_Click方法中?最好是,我希望button_Click方法簡單地調用一個單獨的方法來執行計算並將其放在輸出字符串中。這是我到目前爲止的代碼:從Visual Studio中的WinForms groupBox中檢索單個值

private void groupBox1_Enter(object sender, EventArgs e) 
    { 
     double yrs; 
     bool success; 
     if (rdo15.Checked) 
      success = double.TryParse(rdo15.Text, out yrs); 
     else if (rdo30.Checked) 
      success = double.TryParse(rdo30.Text, out yrs); 
     else 
      success = double.TryParse(textBox2.Text, out yrs); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     string msgStr = string.Format("Your monthly payment will be {0}", payment()); 
     MessageBox.Show(msgStr); 
    } 

    private double payment() 
    { 
     double intRate = Double.Parse(comboBox1.Text); 
     double prin = Double.Parse(txtPrin.Text); 
     double yrs = Double.Parse(groupBox1.Text); 
     //payment calculation 
    } 

我知道我需要轉換爲貨幣格式等,計算後。我能夠使用最後一種方法(支付)檢索所有值,但組合框中的值除外。我知道必須有一個簡單的方法來獲取這些值中的一個(從單選按鈕或文本框),並將其插入到我的數學公式中。有關如何處理它的任何提示?先謝謝你。

+0

如果是真正的應用程序,您應該使用小數點。您可以一直使用開關盒,但如果您只有2個單選按鈕,則可以通過其他方式進行操作,如果 – 2013-04-25 18:27:47

回答

0

你真的會用最好的if語句服務:

if (rad15years.checked) 
    years = 15; 
else if (rad30years.checked) 
    years = 30; 
else 
    years = int.Parse(txtCustomYears.text); 
0

可能對你的需要矯枉過正,但我​​建議使用ListBox而不是多個單選按鈕。然後你可以有一本字典DataSource,其中關鍵是你的歲月,價值就是這個時期的可讀性。所以,你將有兩個(Key,Value)雙那裏現在:

{15, "15 Years"} 
{30, "30 Years"} 

你可以做ListBox1.SelectedValue,分別返回15和30,正確的數據類型,應該能夠直接從那裏插入您的公式。這種方法也給你帶來的好處是你可以很容易地擴展它,並開始支持25 years等期間。

如果因爲任何原因,你想繼續使用單選按鈕,我建議你創建一個自定義類,它將在其自定義屬性中保存Years值。因此,您在表單設計器中配置一個到15,另一個配置爲30。然後就像循環遍歷所有這些一樣簡單,並且如果選中,請抓住它的Years屬性並注入公式中以供進一步處理。這也可以擴展以支持任意數量的單選按鈕。

+0

感謝您的回覆。我敢肯定,這會工作,但該項目的規格要求我使用3個單選按鈕。 2具有固定值,並且可以訪問文本框。 – Daemon 2013-04-25 19:07:31

1

你應該繼續使用你的if/else if/else組合,但你可以改變一些東西。

建立一個類級別的變量,它將存儲這樣的值。

double years = [enter default value if you wish]

然後,您可以使用此整個類。

在您選擇的方法中,您可以隨時設置此變量(下面的函數稍微更有效,因爲不需要設置未使用的變量)。

if (rdo15.Checked) 
    years = 15; 
else if (rdo30.Checked) 
    years = 30; 
else 
    double.TryParse(textBox2.Text, out years); 
+0

謝謝。我意識到我可以在計算中引用一個類變量,但我更願意保持它的私密性。我更感興趣的方式是調用我的計算方法(付款)中的組框中選擇的任何值。 double yrs = Double.Parse(groupBox1.Text)不會檢索一個值,但我會想象還有另一種方法來獲取它。 – Daemon 2013-04-25 19:05:07

+0

你是怎麼說保持私密的?它仍然是私有的類,它的唯一的公共如果打成這樣 – Sayse 2013-04-25 20:52:21

+0

對不起,我的意思是我想它是本地的只是方法。最後我折騰這個想法,並從Button_Clicked調用GROUPBOX值(我不想做),因爲我無法弄清楚如何從GROUPBOX調用一個值的方法。我想你不能那樣做。至少找不到任何文檔。感謝所有回答。 – Daemon 2013-04-26 00:22:53