2014-11-05 4 views
0

У меня проблема с моим текстовым полем. Я хотел, чтобы можно было вручную установить интервал x- и y-оси для диаграммы в графическом интерфейсе в двух текстовых окнах. Это работает, но когда я набираю char или когда я ввел int и удалю его, программа немедленно сработает, и я получаю исключение System.FormatException (без нажатия кнопки, чтобы принять изменения). Как я могу решить, что можно просто набирать разные знаки без немедленного сбоя программы? Мой код ниже:TextBox принимает только int

public void textBox2_TextChanged(object sender, EventArgs e) 
{ 
    x_axis_num = Convert.ToInt32(xAxisBox.Text, usC); 
} 

private void yAxisBox_TextChanged(object sender, EventArgs e) 
{ 
    y_axis_num = Convert.ToInt32(yAxisBox.Text); 
} 

, которая будет послана к другому событию:

chart1.ChartAreas[0].AxisX.Interval = x_axis_num; 
chart1.ChartAreas[0].AxisY.Interval = y_axis_num; 
+1

возможный дубликат [Как я сделать текстовое поле, которое принимает только числа?] (http://stackoverflow.com/questions/463299/how-do-i-make-a-textbox-that-only-accepts-numbers) – Shaharyar

+0

показать, какое событие назначает интервалы диаграммы , Ссылка @Shaharyar поможет вам в части символа, но поскольку вы также заинтересованы в обратном пространстве, вы должны проверить это на своем событии назначения – TheProvost

+0

Это событие происходит, когда я нажимаю кнопку, чтобы нарисовать график. Поэтому, когда я меняю интервалы осей и нажимаю кнопку, она работает нормально. Как это подтвердить? – uzi42tmp

ответ

3

В строке x_axis_num = Convert.ToInt32(xAxisBox.Text, usC);, вы принимаете все, что в текстовом поле и попытаться преобразовать его в целое число.

Как вы думаете, что такое конверсия «Эй, я не номер!» Сделаю? Это будет круто ужасно, в основном потому, что этот текст не является и никогда не будет, числом.

Вместо этого вы можете использовать метод Int.TryParse, который примет любой текст и TRY, чтобы преобразовать его в число.

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

Пример:

int number; 

bool result = Int32.TryParse(YourTextBox.Text, out number); 

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

if(result) 
{ 
    xAxisBox.Text = number.ToString(); 
    x_axis_num = number; 
} 
else 
{ 
    xAxisBox.Text = string.Empty; 

    // Be careful here with what you set. 
    // This is the value you will set when the Text box has a non numeric value! 
    x_axis_num = 0;  
} 
+0

Он говорит мне, что метод TryParse не имеет законных значений, когда я пишу его таким образом - EDIT: sry имел ошибку в нем – uzi42tmp

+0

В каком случае вы предлагаете его разместить? – TheProvost

+0

Я бы сказал, что в обоих случаях оси х и у-оси? или я не прав? Я получаю еще одну ошибку в «xAxisBox.Text = number;» - он говорит мне, что преобразование int в строку невозможно. – uzi42tmp

Смежные вопросы