2016-12-16 4 views
1

Я пытаюсь сделать простой калькулятор, используя только текстовое поле. Я думал, что мой код верен, но результат почти всегда неправильный.Операции только с текстовым полем C#

Это код:

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. Результат будет правильным.

Помогите мне, пожалуйста?

+9

Возможно, вам нужно инвертировать ваши аргументы? – npinti

+0

@npinti Вы правы! Но я не понимаю, почему. Я должен делать длину/скорость, поэтому я сделал textboxLength/textboxSpeed. Если я инвертирую свои аргументы, результат правильный – Marietto

+0

Убедитесь, что вы не поменяли текстовые поля на дисплее, таким образом, вы будете читать из одного поля, когда думаете, что читаете с другого. – npinti

ответ

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