2

我只想知道如何在整个程序中使用更新的速率。到目前为止,这是我的代码供参考...

//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 方法在程序开始时获得费率太模糊了,我只是一个学习简单编程的学生。但是当我再次按下相同的转换时,我仍然需要知道如何使用更新的汇率。如果没有足够的信息,我可以帮助您获得更多编码

4

3 回答 3

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;
    } 
  }
}

所以你有一个简单的共享费率存储,你可以随时使用它

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));
  }  
}
于 2013-07-26T09:56:58.627 回答
2

有许多不同的方法可以实现这一点,如果不为您做出设计决定,就不可能完整回答。想到的方法是使用配置文件、数据库或某些外部源。

正如您所指出的,您需要有某种方法将这些值存储在您的应用程序之外,因此如果转换率发生变化,您可以在您的软件中更新它而无需重写您的代码。

您需要决定如何执行此操作。

数据库 数据库可能是最灵活的,但它需要您维护它。有无数的机制可以通过Linq2SQLNHibernate从ADO.NET访问数据库。

外部来源 我确信您可以从各种在线来源获取货币数据,无论是您可以访问的网络服务还是 RSS 提要 - 是否值得一读这些?

配置 就我个人而言,这是我建议的方法。由于您显然不是很有经验,我建议您使用更简单的配置解决方案,提高您的数据库技能 - 将来这对您来说将是一件轻而易举的事。

我会使用与此处类似的配置文件的 AppSettings 部分。

您可以将 App.Config 文件添加到您的应用程序,这将存储转换率,以便您可以更新它们而无需重写您的工具。您可以通过右键单击项目并添加新项目,然后添加配置文件来创建新文件。

您还需要添加对 System.Configuration 的引用,因为默认情况下不引用它。

配置文件中有一个名为 AppSettings 的部分,这是键/值类型属性的简单部分。我们将创建一组应用程序设置,为每个转化率设置一个。例如:

然后,您可以使用您的国家/地区生成此密钥。例如:

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

您可以使用 ConfigurationManager 访问此配置值:

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

一旦你得到了比率,你就可以执行乘法来计算正确的值。

请记住这里没有错误处理 - 如果国家不知道或配置不包含汇率会发生什么!

于 2013-07-26T10:05:45.873 回答
0

如果您不使用实际货币数据而只是使用静态数据,那么以下是改进的步骤:

  1. 以一种货币作为基础货币。通常是美元,价值 1
  2. 以美元存储集合 [Key,Value] 中所有货币的所有汇率。这里的 Key 是您的货币代码,例如 SGD,value 是它的美元汇率。
  3. 现在您可以将选定的下拉值作为 Key 传递以检索值,例如 Currencies[toCountry.Code]
  4. 现在来获取利率。您可以这样划分以获取 FromCountry 的 ToCountry 值

    var FromCountryRate = Currencies[FromCountry.Value]/Currencies[ToCountry.Value];
    
于 2013-07-26T10:03:10.287 回答