System formatexception входная строка имела неверный формат

Такая проблема нельзя чтобы в textBox было пусто, там обязательно должно быть число double. когда в форме ничего нет вылазит ошибка
"Необработанное исключение типа "System.FormatException" в mscorlib.dll

Дополнительные сведения: Входная строка имела неверный формат. "
И показывает на код:
private void textBox1_TextChanged(object sender, EventArgs e)
<
double f = double.Parse(textBox1.Text); // Указывает ошибку в этом месте
textBox2.Text = ((f — 32) * (5.0 / 9.0)).ToString();
>

Если нужно вот весь код:
namespace WindowsFormsApplication1
<
public partial class Form1 : Form
<
public Form1()
<
InitializeComponent();
>

private void label1_Click(object sender, EventArgs e)
<

private void textBox1_TextChanged(object sender, EventArgs e)
<
double f = double.Parse(textBox1.Text);
textBox2.Text = ((f — 32) * (5.0 / 9.0)).ToString();
>

private void label2_Click(object sender, EventArgs e)
<

private void button1_Click(object sender, EventArgs e)
<
Clipboard.SetText(textBox2.Text);
>

private void textBox2_TextChanged_1(object sender, EventArgs e)
<

При выполнении этого куска кода происходит ошибка.

Почему собственно неверный формат, вроде всё правильно.

P.S пример из книги Andrew Troelsen. Pro C# and .NET4.5

  • Вопрос задан более трёх лет назад
  • 13774 просмотра

Все дело в локализации которая установлена в операционной системе. Если ru, то запитая, если eng, то точка.

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

Если всегда запятая, но не уверены, что будет стоять русская локализация в системе:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Culsy
<
public partial class Form1 : Form
<
public Form1()
<
InitializeComponent();

float a, b;
int count;
bool znak = true;
private void Form1_Load(object sender, EventArgs e)
<

Читайте также:  Kodak photo printer 6800

>
private void textBox1_TextChanged(object sender, EventArgs e)
<

>
private void button1_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 1;
>

private void button2_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 2;
>

private void button3_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 3;
>

private void button4_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 4;
>

private void button5_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 5;
>

private void button6_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 6;
>

private void button7_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 7;
>

private void button8_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 8;
>

private void button9_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 9;
>

private void button10_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + 0;
>

private void button11_Click(object sender, EventArgs e)
<
textBox1.Text = textBox1.Text + ",";
>
private void button12_Click(object sender, EventArgs e)
<

a = float.Parse(textBox1.Text);
textBox1.Clear();
count = 1;
textBox1.Text = a.ToString() + "+";
znak = true;

private void button13_Click(object sender, EventArgs e)
<
a = float.Parse(textBox1.Text);
textBox1.Clear();
count = 2;
textBox1.Text = a.ToString() + "-";
znak = true;
>

private void button14_Click(object sender, EventArgs e)
<
a = float.Parse(textBox1.Text);
textBox1.Clear();
count = 3;
textBox1.Text = a.ToString() + "*";
znak = true;
>

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
<

char number = e.KeyChar;

if (!Char.IsDigit(number))
<
e.Handled = true;
>

>
private void culsy()
<
switch (count)
<
case 1:
b = a + float.Parse(textBox1.Text);
textBox1.Text = b.ToString();
break;
case 2:
b = a — float.Parse(textBox1.Text);
textBox1.Text = b.ToString();
break;
case 3:
b = a * float.Parse(textBox1.Text);
textBox1.Text = b.ToString();
break;
case 4:

b = a / float.Parse(textBox1.Text);
textBox1.Text = b.ToString();

break;
default:
break;
>
>
private void button16_Click(object sender, EventArgs e)
<
culsy();
textBox1.Text = "";

private void label1_Click(object sender, EventArgs e)
<

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *