#1 15.05.08 22:23
Как отловить эту ошибку с++ .net?
Если в textBox1 ввести буквы или ничего не вводить то происходит ошибка...пытаюсь отловить её вот так:
Код::
try
{
max = Convert::ToUInt64(textBox1->Text);
}
catch()//Что написать в скобочках???
{
MessageBox::Show("Вы ввели что угодно...только не число...повторите ввод..." ,"Ошибка");
}Offline
#3 15.05.08 22:46
Re: Как отловить эту ошибку с++ .net?
Sunrise, ругается вот так...
Error 2 error C2316: 'System::Exception' : cannot be caught as the destructor and/or copy constructor are inaccessible d:\разное\сорцы\числа мерсенна\числа мерсенна\Form1.h 115
Error 1 error C2725: 'System::Exception' : unable to throw or catch a managed object by value or reference d:\разное\сорцы\числа мерсенна\числа мерсенна\Form1.h 115
ЗЫ до этого ошибок не было...
Offline
#4 15.05.08 23:35
Re: Как отловить эту ошибку с++ .net?
Код: c#:
//вариант 1 try { int i = Convert.ToInt32(Text1.Text); } catch(FormatException e) { //код для обработки ошибки MessageBox.Show("Ошибка", "Информация", MessageBoxButtons.OK); } finally { } //вариант 2 использовать RegEx для проверки if (IsDigitString(Text1.Text)) { int i = Convert.ToInt32(Text1.Text); } private bool IsDigitString(string text) { return System.Text.RegularExpressions.Regex.IsMatch(text, "[0-9]*"); }
Исправлено drug_detei (15.05.08 23:49)
Offline
#5 15.05.08 23:44
Re: Как отловить эту ошибку с++ .net?
еще пример нашел
Код: c#:
protected void CmdConvert1(object sender, EventArgs e) { //set the default value uint uiDecimal = 0; try { // Convert text string to integer uiDecimal = Convert.ToUInt32(TxtText1.Text); } catch (OverflowException exception) { // Show overflow message and return TxtHex1.Text = "Overflow"; return; } // Format hex value and show in another textbox TxtHex1.Text = String.Format("{0:x2}", uiDecimal); } protected void CmdConvert2(object sender, EventArgs e) { uint uiHex = 0; try { // Convert hex value to int uiHex = Convert.ToUInt32(TxtHex2.Text, 16); } catch (OverflowException exception) { // Show overflow message and return TxtText2.Text = "Overflow"; return; } // Format it and show as a string TxtText2.Text = uiHex.ToString(); }
Offline
#6 15.05.08 23:49
Re: Как отловить эту ошибку с++ .net?
либо скобочки после catch не ставь - он будет отлавливать ошибки всех типов, либо ставь
catch(System::Exception^ Ex)
{
...
}
это тоже самое, что вообще без скобок.
а вообще, нужно отлавливать исключения тех типов, что возвращает метод Convert. Это если грамотно. А ваще, сойдет и без скобок )))
P.S. я не уверен насчет нуженг ли крыжык, ибо Манагед ЦэПэПэ - малое извращение. Используйте Си Шарп.
Исправлено Andron_ (15.05.08 23:51)
Offline
#10 16.05.08 17:36
#11 16.05.08 18:16
#12 16.05.08 18:36
Re: Как отловить эту ошибку с++ .net?
Muxa, ну трайпарс, ага, могёт.
только логика запутанней будет с этой конструкцией. else какой-то городить надо...
плюс непонятно в общем случае что произошло... с исключениями можно узнать что произошло на самом деле.
Плюс, далеко не всегда нужно узнавать результат парсинга в той функции, что собственно его вызывает. А в этом случае с этими ифами и булевыми возвращаемыми значениями можно ууух как задолбаться.
т.е. далеко не всегда логика описывается как
Код::
void OurF()
{
//парсим, что-то еще делаем, ветвимся
}может быть так:
Код::
void GreatF()
{
//бла-бла-бла
//MegaParse();
//и вот тут то при успешно парсинге нужно что-то делать
//с ифами вам нужно получить результат из ТрайПарс, вам его нужно получить, а потом еще
//раз передать.
}вопрос целесообразности исключений для автора, естессна, открыт.
Offline
#13 16.05.08 20:41
#14 16.05.08 21:09
#15 16.05.08 21:11
Re: Как отловить эту ошибку с++ .net?
про "не кидает исключения" - я хочу напомнить, что исключения в .NET отнюдь не механизм для критических случаев. Исключения в .NET широко используются как штатных инструмент в работе приложения. И "выбросилось исключение" отнюдь не означает, что в работе приложения произошел сбой.
Offline
#16 16.05.08 21:39
#17 16.05.08 22:02
#18 17.05.08 19:58
#19 17.05.08 22:39
#20 20.05.08 23:16
#21 22.05.08 23:42
Re: Как отловить эту ошибку с++ .net?
Andron_ написал(а):
отказ от catch даалеко не всегда является грамотным программированием.
да и вообще, мне очень интересно, как ты собрался бороться с исключениями ифами. Парсер свой писать чтоли?
ошибка озвучена, проблем избежать её не вижу.
исключения надо ловить там где ты не знаешь, что они могут быть наверняка, заведомые ошибки лучше исправить алгоритмически.
Offline

