仅使用文本框c#进行操作

时间:2016-12-16 09:06:00

标签: c# math calculator

我正在尝试仅使用文本框制作一个简单的计算器。 我认为我的代码是正确的,但结果几乎总是错误的。

这是代码:

void TextBoxPercorsoTextChanged(object sender, EventArgs e)
    {
        if(!string.IsNullOrEmpty(textBoxPercorso.Text) && !string.IsNullOrEmpty(textBoxAgilitySmallVelocita.Text))
            textBoxAgilitySmallTps.Text=(Convert.ToDecimal(textBoxPercorso.Text)/Convert.ToDecimal(textBoxAgilitySmallVelocita.Text)).ToString();
    }

    void TextBoxAgilitySmallVelocitaTextChanged(object sender, EventArgs e)
    {
        if(!string.IsNullOrEmpty(textBoxPercorso.Text) && !string.IsNullOrEmpty(textBoxAgilitySmallVelocita.Text))
            textBoxAgilitySmallTps.Text=(Convert.ToDecimal(textBoxPercorso.Text)/Convert.ToDecimal(textBoxAgilitySmallVelocita.Text)).ToString();
    }

我试过做一些尝试。例如,我试图做10/5,但结果是0.5。仅使用10/10,结果是正确的。

请帮帮我吗?

1 个答案:

答案 0 :(得分:0)

尝试避免魔术按钮反模式(提取方法);不要重复自己(复制+粘贴):

   private void ComputeSmallTps() {
     decimal perCorso;
     decimal smallVelocita;

     // first, parse arguments...
     if (!decimal.TryParse(textBoxPercorso.Text, out perCorso) ||
         !decimal.TryParse(textBoxAgilitySmallVelocita.Text, out smallVelocita)) {
       // invalid input data, e.g. "bla-bla-bla"
       textBoxAgilitySmallTps.Text = "???"; 

       return;
     }

     try { 
       // ...then compute: put the right formula here 
       // put break point here, check smallVelocita and perCorso values
       decimal result = smallVelocita / perCorso;

       textBoxAgilitySmallTps.Text = result.ToString(); 
     }
     catch (ArithmeticException) {
       // Division by zero, overflow 
       textBoxAgilitySmallTps.Text = "???";
     }
   }

   ...

   void TextBoxPercorsoTextChanged(object sender, EventArgs e) {
     // Just a simple call, no complex logic here
     ComputeSmallTps();
   }

   void TextBoxAgilitySmallVelocitaTextChanged(object sender, EventArgs e) {
     ComputeSmallTps();
   }