2016-11-18 6 views
1

Я строю это три текстовых поля, где, если два текстовых поля заполнены, сумма будет отображаться, однако, когда я ввожу 10 + 10. Результат - 1010. Может ли кто-нибудь помочь мне с этим?C# WinForms - добавление двух текстовых полей автоматически

Вот мой код:

public void textBoxTranspo_TextChanged(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(textBoxTranspo.Text) && !string.IsNullOrEmpty(textBoxDaily.Text)) 
     textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text).ToString()); 
} 

public void textBoxDaily_TextChanged(object sender, EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(textBoxTranspo.Text) && !string.IsNullOrEmpty(textBoxDaily.Text)) 
     textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text).ToString()); 
} 
+0

[строка = строка + INT: Что за кадром] (http://stackoverflow.com/questions/3398604/string-string-int-whats-behind-the-scenes) –

ответ

2

Это магия (полиморфизм) оператора +. он добавит значения двух операндов, если операнды имеют числовые типы (int, long, double), и он будет конкатенировать два операнда, если они имеют строки типа или даже одну строку и второе целое число (как в вашем случае). Здесь в вашем случае .ToString() после преобразования создает проблемы. Вы получите ожидаемый результат, удалив это из этой строки.

дополнительное примечание: Convert.ToInt32 выбросит FormatException если входной текст не является конвертируемой, поэтому использовать нужно использовать int.TryParse для преобразования текста в целое. так что код будет выглядеть следующим образом:

int intTranspo=0,intBoxDaily=0; 

if(int.TryParse(textBoxTranspo.Text,out intTranspo) && int.TryParse(textBoxDaily.Text,out intBoxDaily)) 
    textBoxTotalAmount.Text = (intTranspo + intBoxDaily).ToString(); 
+0

Привет, Я понимаю ваш ответ и благодарю вас за это, но, как вы сказали, я попытался удалить вашу указанную '.ToString() ', но он сказал:« Невозможно неявно преобразовать тип «int» в «string». Но в целом это работает как шарм! Спасибо – Noobster

+0

Но, действительно ли это означает, что я помещаю 'int intTranspo = 0, intBoxDaily = 0;' в два разных 'public void'? Разве это не избыток, или так оно и есть? – Noobster

+0

Да, вы должны объявить эту переменную перед использованием. Поскольку вы передаете их методу TryParse как параметры. –

1

Делают это так:

int ans = 0; 
ans = Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text); 
textBoxTotalAmount.Text = ans.ToString(); 

EDIT:

Это только один из способов создания чистой/аккуратный и более читаемый код. Путь другой ответил, как этот

textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text)).ToString(); 

тоже правильно, но если другие программисты читать код, то первый один я написал более читаемым и в этом случае более эффективным.

Вы получаете 1010, потому что вы неуместны .ToString()

+0

уход добавить какое-то объяснение, почему это и почему не OP –

1

Может быть, это должно быть:

textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text)).ToString(); 
+0

помогите добавить какое-то объяснение, почему это и почему не OP –

1

, чтобы избежать путаницы, во-первых, попытаться преобразовать значения в текстовые поля междунар, и поместить его в соответствующих переменных в случае успеха, и выход недействительный приглашение, если нет.

int input1 = 0; 
int input2 = 0; 

try 
{ 
    input1 = Convert.ToInt32(textBoxTranspo.Text); 
    input2 = Convert.ToInt32(textBoxDaily.Text); 
    ans = input1 + input2; 


    if (!string.IsNullOrEmpty(textBoxTranspo.Text) && !string.IsNullOrEmpty(textBoxDaily.Text)) 
    { 
     textBoxTotalAmount.Text = ans.ToString(); 
    } 

} 
catch (Exception) 
{ 
    textBoxTotalAmount.Text = "Invalid input"; 
} 
2

Удалить toString в конце заявления.

textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text)) 
Смежные вопросы