C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выделить код catch в отдельную функцию  (Прочитано 1869 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Выделить код catch в отдельную функцию
« : 05 Февраль 2015, 12:13:37 »

В Андроид рекомендовано вместо просто вызова ShowMessage использовать анонимный метод: ссылка на код

У меня есть такая конструкция:
Код
try
{
        //код
}
catch(Exception &E)
{
  struct TCloseDialogHandler : public TCppInterfacedObjectTInputCloseDialogProc>
{
void __fastcall Invoke(const System::Uitypes::TModalResult AResult)
 {
switch (AResult)
{
case mrYes :
{
 Application->Terminate();
 //ShowMessage("You chose Yes");
}
break;
case mrNo:
ShowMessage("You chose No");
break;
case mrCancel:
ShowMessage("You chose Cancel");
break;
}
 }
};
 
_di_TInputCloseDialogProc handler = new TCloseDialogHandler();
String MES = L"Error. Class: " + E.ClassName() + L"\nMessage: " + E.Message + L"\nThe program will be closed.";
MessageDlg(MES, TMsgDlgType::mtInformation, TMsgDlgButtons() TMsgDlgBtn::mbYes, 0, handler);
 
}
 

Писать во всех catch одно и тоже утомительно.
Правильно ли я создала функцию и правильно ли передаю параметры?
Код
void ExceptionMessage(Exception &E)
{
 struct TCloseDialogHandler : public TCppInterfacedObjectTInputCloseDialogProc>
{
void __fastcall Invoke(const System::Uitypes::TModalResult AResult)
 {
switch (AResult)
{
case mrYes :
{
 Application->Terminate();
 //ShowMessage("You chose Yes");
}
break;
case mrNo:
ShowMessage("You chose No");
break;
case mrCancel:
ShowMessage("You chose Cancel");
break;
}
 }
};
 
_di_TInputCloseDialogProc handler = new TCloseDialogHandler();
String MES = L"Error. Class: " + E.ClassName() + L"\nMessage: " + E.Message + L"\nThe program will be closed.";
MessageDlg(MES, TMsgDlgType::mtInformation, TMsgDlgButtons() TMsgDlgBtn::mbYes, 0, handler);
 
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
try
{
       //код
}
catch(Exception &E)
{
ExceptionMessage(E);
}
 
}
 
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Выделить код catch в отдельную функцию
« Ответ #1 : 05 Февраль 2015, 16:12:12 »

Да, только объявление структуры TCloseDialogHandler лучше вынести за пределы функции ExceptionMessage, чтобы каждый раз не объявлять. Либо сделать объявление статическим.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Выделить код catch в отдельную функцию
« Ответ #2 : 05 Февраль 2015, 16:30:54 »

Спасибо.

Цитировать
TCloseDialogHandler лучше вынести за пределы функции ExceptionMessage

У меня в MessageDlg только кнопка YES, а там строка Application->Terminate(). Значит структура будет объявлена один только раз...
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Выделить код catch в отдельную функцию
« Ответ #3 : 06 Февраль 2015, 13:20:33 »

Цитата: SilverFish от 05 Февраль 2015, 16:30:54
Спасибо.

Цитировать
TCloseDialogHandler лучше вынести за пределы функции ExceptionMessage

У меня в MessageDlg только кнопка YES, а там строка Application->Terminate(). Значит структура будет объявлена один только раз...


Ну если ничего, что программа закрывается при любом исключении...
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #4 : 06 Февраль 2015, 16:30:49 »

Цитировать
программа закрывается при любом исключении

Андроид минное поле, как он себя будет вести при ошибках в программе я смутно представляю. Поэтому решила закрывать программу, но перед закрытием увидит осмысленное сообщение в чем проблема. Остановилась на таком подходе...

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.107 секунд. Запросов: 21.