Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка исключений, try ... catch (FormatException fEx) 
:(
    Опции темы
PashaSem
Дата 2.2.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



Все Привет!
Есть ввод значения в    int  Unit_Number = Int32.Parse(Adr_drives.Text);
и  его обработка .
Код

 private void Appl_Adr_Click(object sender, EventArgs e)
        {
            try
            {
                
                    int  Unit_Number = Int32.Parse(Adr_drives.Text);
                    int step_number = Int32.Parse(Steps_Num.Text);
                
                if ((Unit_Number >= 1 && Unit_Number <= 16) && (step_number >= -400000 && step_number <= 400000))
                {
                    string Drive_Adress = "D330";
                    Conn_W_IntData(Drive_Adress, Unit_Number);
                    string szDeviceList1 = "D331";
                    Connection_W_Data(szDeviceList1, step_number);

                }
                else { MessageBox.Show(" Не правильные значения ввода "); }
            }
            catch (FormatException fEx)
            { MessageBox.Show(fEx.Message); }// = fEx.Message; }
        }

Все работает пока не вводим число 5000000000 в Steps_Num.Text);
Как избежать данной ситуации 
Спасибо!
PM MAIL   Вверх
Дрон
Дата 2.2.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 2
Всего: 92



Цитата(PashaSem @  2.2.2007,  12:52 Найти цитируемый пост)
Все работает пока не вводим число 5000000000 в Steps_Num.Text

А что происходит? Программа говорит: "Всё! Больше работать не буду!"  smile 

Но я, наверно, сейчас угадаю... Возникает unhandled exception (необработанное исключение) и программа сваливается в отладчик?
Теперь... Если чуть-чуть, буквально самую малость, призадуматься и попытаться понять, что же стоит за словами необработанное исключение, то мы придём к выводу, что его на самом деле нужно обработать! Гениально, не правда ли?

Но ведь у нас же уже есть блок catch, возразит автор. Есть-то он есть, но только откуда бедному автору (ведь у него нет MSDN) знать, какие именно исключения могут произойти в методе Int32.Parse...
Подскажу. Там может возникнуть ещё и OverflowException, когда полученное число выходит за диапазон Int32... И ведь надо же такому случиться, что 5000000000 действительно вне этого диапазона.
Чёрт. Кто бы мог подумать. Особенно если учесть, что сам отладчик должен сказать, что произошло OverflowException. Мистика, не правда ли?

Это сообщение отредактировал(а) Дрон - 2.2.2007, 14:02


--------------------
Да. Именно так.
PM   Вверх
-Mikle-
Дата 2.2.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Тип int может содержать значения от -2 147 483 647 до 2 147 483 648
Есть тип uint содержащий значения от 0 до 4 294 967 296
В твоем случае 5 миллиардов, что выходит за границы типа.
Используй тип long или ulong , чтобы сохранить такие цифры.
long от -9 223 372 036 854 775 807 до 9 223 372 036 854 775 808
ulong от 0 до 18 446 744 073 709 551 616
такого диапазона хватит тебе хватит точно!  smile 


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
PashaSem
Дата 2.2.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 5.3.2006

Репутация: нет
Всего: нет



Спасибо За Столь Поучительный Урок!
Я понял!  Вопрос Буду ставить более точно.
То что нет возможности преобразовать в Int32 это понятно по сообщению.
НО дальнейшая работа с полученной величиной должна проволиться именно с Int32. преобразование типов не гарантирует что пользователь не нажмет клавишу и не будет держать ее до упора!


Как вариант Возможно просто ограничить количество вводимых знаков ?

Спасибо!
PM MAIL   Вверх
ivashkanet
Дата 2.2.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Цитата(PashaSem @  2.2.2007,  14:57 Найти цитируемый пост)
Как вариант Возможно просто ограничить количество вводимых знаков ?

Как вариант, обычно говорят пользователю, что он ввел слишком большое число и просят ввести еще раз  smile 
PM MAIL WWW ICQ   Вверх
-Mikle-
Дата 2.2.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



мда... вот что значит не правильная постановка вопросов!!!  smile 


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.