2013-07-26 18 views
2

我只是想知道如何使用在整個程序中的更新速度。這裏是我到目前爲止的代碼以供參考......更新我的貨幣轉換費率C#

//Form 1 
private void update_Click(object sender, EventArgs e) 
{ 
    if (fromcountry.Text == tocountry.Text) 
    { 
     MessageBox.Show(" Please Choose Two Different Currencies To Use This Function", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
    } 
    else 
    { 
     btnconvert.Enabled = true; 
     Exchange_Rate frm = new Exchange_Rate(); 
     frm.Show(this); 
    } 
} 
//Form 1 one of the comboboxes for selecting 2nd country 
private void tocountry_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    btnupdate.Enabled = true; 
    btnconvert.Enabled = true; 
    txtvalue.Enabled = true; 
    exchange(); 
} 
private void exchange() 
{ 
    if (fromcountry.Text == tocountry.Text) 
    { 
     lblexchange.Text = "1"; 
    } 
    else if (fromcountry.Text == "SGD - Singapore Dollar" && tocountry.Text == "USD - US Dollar") 
    { 
     lblexchange.Text = "1.26"; 
    } 
    else if (fromcountry.Text == "SGD - Singapore Dollar" && tocountry.Text == "MYR - Malaysian Ringgit") 
    { 
     lblexchange.Text = "2.35"; 
    } 
    else if (fromcountry.Text == "SGD - Singapore Dollar" && tocountry.Text == "EUR - Euro") 
    { 
     lblexchange.Text = "0.60"; 
    } 
//Form 2 
private void btnok_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     double exchange; 
     exchange = Double.Parse(txtcurrent.Text); 
     var frm = (currencyconverter)this.Owner; 
     frm.PassValue(txtcurrent.Text); 
     this.Close(); 
    } 
    catch 
    { 
     MessageBox.Show("Please Enter Numbers", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     txtcurrent.Text = ""; 
    } 
} 

我知道使用的if-else方法是過於空泛,在節目開始時獲取率和我只是一個學生的學習簡單的編程。但是當我再次按相同的轉換時,我仍然需要知道如何使用更新的速率。如果沒有足夠的信息,我可以幫助你獲得更多的編碼

+0

提示:使用數據庫存儲更改率 – wudzik

+0

喜歡什麼樣的? – user2610573

+0

爲了您的目的,它可以是.sdf文件。 http://stackoverflow.com/questions/1121917/local-database-i-need-some-examples – wudzik

回答

4

您可以使用一個共享的貨幣對象保存有關貨幣

public class Currency 
{ 
    private Currency(string name) 
    { 
    Name = name; 
    } 

    public string Name {get; private set;} 
    public decimal Rate {get; private set;} 

    private void SetRate(decimal rate) 
    { 
    Rate = rate; 
    OnRateChanged(this); 
    } 

    public static event EventHandler RateCanged; 
    private static OnRateChanged(Currency currency) 
    { 
    var handler = RateChanged; 
    if(handler != null) 
    { 
     handler(currency, EventArgs.Empty); 
    } 
    } 

    private Dictionary<string, Currency> currencies = new Dictionary<string, Currency>(); 

    public static Currency GetCurrency(string name) 
    { 
    Currency currency; 
    if(!currencies.TryGetValue(name, out currency)) 
    { 
     currency = new Currency(name); 
     currencies[name] = currency; 
    } 
    } 
} 

所以,你有一個簡單的共享率的空間,您可以的速度信息使用它,如果你不使用實際的貨幣數據,只是一個靜態的數據everywere

class Form1 
{ 
    public Form1() 
    { 
    ... 
    Currency.RateChanged += RateChanged; 
    } 

    private void RateChanged(object source, EventArgs e) 
    { 
    labelRate.Text = Currency.GetCurrency("USD").Rate; 
    } 
} 

class Form2 
{ 
    public Form2() 
    { 
    ... 
    rateTextBox.Text = Currency.GetCurrency("USD").Rate.ToString(); 
    } 

    void updateButtin_Click() 
    { 
    Currency.GetCurrency("USD").SetRate(decimal.Parse(rateTextBox.Rate)); 
    } 
} 
+0

對不起,如果它太乾燥...這是什麼類的所有關於,我應該如何鏈接它? – user2610573

+0

我的第一部分代碼是Currency類。這是使用兩個字段Name和Rate的簡單貨幣對象實現。用作貨幣存儲的相同對象,存儲所有用過的藥品,並通知所有收件人有關RateCanged事件 –

+0

的更改,因此名稱和費率等於我選擇的國家和費率? – user2610573

0

,那麼這裏有改善的步驟:

  1. 有一種貨幣作爲基礎貨幣。通常它與美元價值1
  2. 存儲所有的價格以美元集合[鍵,值]在所有的貨幣。 這裏的關鍵是你的貨幣代碼例如,SGD和價值是其在美元的匯率。
  3. 現在您可以將選定的下拉值作爲密鑰來檢索該值,例如貨幣[toCountry.Code]
  4. 現在可以獲取該價格。您可以將這樣的ToCountry方面

    var FromCountryRate = Currencies[FromCountry.Value]/Currencies[ToCountry.Value]; 
    
2

有許多不同的方式來實現這一目標得到FromCountry的價值,它會不作出某個設計決定了是不可能完全回答您。想到的方法是使用配置文件,數據庫或一些外部源。

正如您所指出的,你需要讓你的應用程序之外存儲這些值,因此如果某種方式的轉換率的變化,你可以在你的軟件更新,而不需要重寫代碼。

你需要就如何做到這一點的決定。

數據庫 數據庫可能是最靈活的,但它會要求你維護它。有從ADO.NET訪問數據庫,通過Linq2SQLNHibernate無數機制。

外部源 我敢肯定有各種在線資源,你可以得到從貨幣數據,無論是一個Web服務或RSS訂閱,你可以訪問 - 這可能是值得這些讀了?

配置 個人而言,這是我建議的方法。由於你顯然不是很有經驗,我會建議配置的更簡單的解決方案,工作在你的數據庫技能 - 在未來它將是一個沒有頭腦的人。

我會使用類似於here的配置文件的AppSettings部分。

您可以將App.Config文件添加到您的應用程序,這將存儲轉換率,以便您可以更新它們而無需重新編寫工具。您可以通過右鍵單擊項目並添加新項目,然後添加配置文件來創建一個新文件。

您還需要在System.Configuration上添加一個引用,因爲它在默認情況下未被引用。

配置文件中有一個名爲AppSettings的部分,這是鍵/值類型屬性的一個簡單部分。我們將創建一組應用設置,每個轉化率一個。例如:

然後,您可以使用您的國家生成此密鑰。例如:

string settingKey = string.Concat(fromcountry.Text, "_", tocountry.Text); 

可以使用ConfigurationManager中訪問此配置值:

decimal rate = decimal.Parse(ConfigurationManager.AppSettings[settingKey]); 

一旦你得到了你就可以執行你的乘法計算正確值的比率。

請注意,此處沒有錯誤處理 - 如果國家/地區未知或配置不包含匯率,會發生什麼情況!

+0

ConfigurationManager.AppSettings正在使用系統.....? – user2610573

+0

System.Configuration我相信 - 該DLL沒有默認引用,所以你需要添加它。 – Liath

+0

我使用的配置方法很失落。我應該如何使用它?你能詳細說明嗎?對不起,打擾你任何進一步的 – user2610573