我只想知道如何在整个计划中使用更新的费率。到目前为止,这是我的代码供参考......
//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 :(得分: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));
}
}
答案 1 :(得分:2)
有许多不同的方法可以实现这一目标,如果不为您做出设计决定,将无法完全回答。想到的方法是使用配置文件,数据库或某些外部源。
正如您所指出的,您需要有一些方法将这些值存储在应用程序之外,因此如果转换率发生变化,您可以在软件中更新它,而无需重写代码。
你需要决定如何做到这一点。
<强>数据库强> 数据库可能是最灵活的,但它需要您维护它。有无数机制可以从ADO.NET,Linq2SQL或NHibernate访问数据库。
外部来源 我相信你可以从各种在线资源获得货币数据,无论是网络服务还是你可以访问的RSS提要 - 这些都值得阅读吗?
<强>配置强> 就个人而言,这是我建议的方法。由于你显然不是很有经验,我建议使用更简单的配置解决方案,处理你的数据库技能 - 将来它对你来说将毫不费力。
我会使用配置文件的AppSettings部分,类似于here。
您可以将App.Config文件添加到您的应用程序,这将存储转换率,以便您可以更新它们而无需重写您的工具。您可以通过右键单击项目并添加New Item,然后添加Configuration File来创建新文件。
您还需要在System.Configuration上添加一个引用,因为默认情况下它没有被引用。
配置文件中有一个名为AppSettings的部分,这是键/值类型属性的简单部分。我们将创建一组应用设置,每个转化率一个。例如:
然后,您可以使用您所在的国家/地区生成此密钥。例如:
string settingKey = string.Concat(fromcountry.Text, "_", tocountry.Text);
您可以使用ConfigurationManager访问此配置值:
decimal rate = decimal.Parse(ConfigurationManager.AppSettings[settingKey]);
获得费率后,您就可以执行乘法运算来计算正确的值。
请注意,这里没有错误处理 - 如果国家未知或配置不包含汇率会怎样?
答案 2 :(得分:0)
如果您没有使用实际货币数据而只是静态数据,那么以下是需要改进的步骤:
现在获得费率。您可以这样划分以获取FromCountry的ToCountry值
var FromCountryRate = Currencies[FromCountry.Value]/Currencies[ToCountry.Value];