Информация об изменениях

Сообщение Re: [winforms][exception]Оформление оформление обработчиков от 29.09.2016 8:41

Изменено 29.09.2016 8:43 Карбофос

Здравствуйте, nikda, Вы писали:

N>При работе с WinForms получается куча обработчиков различных WinForms-событий.

N>Шаблон кода почти у всех одинаковый (см. ниже)
N>Есть ли хороший способ уйти от дублирования кода?


N>
N>  private void Button1_Click(x,y,z)
N>  {
N>    try
N>    {
N>       // some actions
N>       // ...
N>       throw new Exception();
N>       // ...       
N>    }
N>    catch(Exception ex)
N>    {
N>      ShowErrorForUser(ex.Message);
N>    }
N>  }

N>  private void Button2_Click(x,y,z)
N>  {
N>    try
N>    {
N>       // some actions
N>       // ...
N>       throw new Exception();
N>       // ...       
N>    }
N>    catch(Exception ex)
N>    {
N>      ShowErrorForUser(ex.Message);
N>    }
N>  }
  
N>  //..
  
N>  private void ButtonN_Click(x,y,z,d,e)
N>  {
N>    try
N>    {
N>       // some actions
N>       // ...
N>       throw new Exception();
N>       // ...       
N>    }
N>    catch(Exception ex)
N>    {    
N>      ShowErrorForUser(ex.Message + "Some text");
N>      DoSomeOtherAction();
N>    }
N>  }
N>

1. У событий есть параметр sender
2. У контролов есть свойство Tag
...
button1.Tag = new MyParam(x1,y1,z1);
button2.Tag = new MyParam(x2,y2,z2);
...
button1.Click += anybutton_click;
button2.Click += anybutton_click;
...
void anybutton_click(object sender, ...)
{
  var tag = (sender as Control).Tag;
  if (tag is MyParam)
  {
    DoSomething(tag as MyParam);
  }
}

private void DoSomething(MyParam p)
{
  try
  {
    ...
  }
  catch(Exception ex)
  {    
    ShowErrorForUser(ex.Message + "Some text");
    DoSomeOtherAction();
  }
}
Re: [winforms][exception]Оформление оформление обработчиков
Здравствуйте, nikda, Вы писали:

N>При работе с WinForms получается куча обработчиков различных WinForms-событий.

N>Шаблон кода почти у всех одинаковый (см. ниже)
N>Есть ли хороший способ уйти от дублирования кода?


N>
N>  private void Button1_Click(x,y,z)
N>  {
N>    try
N>    {
N>       // some actions
N>       // ...
N>       throw new Exception();
N>       // ...       
N>    }
N>    catch(Exception ex)
N>    {
N>      ShowErrorForUser(ex.Message);
N>    }
N>  }

N>  private void Button2_Click(x,y,z)
N>  {
N>    try
N>    {
N>       // some actions
N>       // ...
N>       throw new Exception();
N>       // ...       
N>    }
N>    catch(Exception ex)
N>    {
N>      ShowErrorForUser(ex.Message);
N>    }
N>  }
  
N>  //..
  
N>  private void ButtonN_Click(x,y,z,d,e)
N>  {
N>    try
N>    {
N>       // some actions
N>       // ...
N>       throw new Exception();
N>       // ...       
N>    }
N>    catch(Exception ex)
N>    {    
N>      ShowErrorForUser(ex.Message + "Some text");
N>      DoSomeOtherAction();
N>    }
N>  }
N>

1. У событий есть параметр sender
2. У контролов есть свойство Tag
...
button1.Tag = new MyParam(x1,y1,z1);
button2.Tag = new MyParam(x2,y2,z2);
...
button1.Click += anybutton_click;
button2.Click += anybutton_click;
...
void anybutton_click(object sender, ...)
{
  var tag = (sender as Control).Tag;
  if (tag is MyParam)
  {
    DoSomething(tag as MyParam);
  }
}

private void DoSomething(MyParam p)
{
  try
  {
    ...
  }
  catch(Exception ex)
  {    
    ShowErrorForUser(ex.Message + "Some text");
    DoSomeOtherAction();
  }
}

А если чисто исключения все заворачивать, то это ИМХО вообще не в тему. исключения — они не для пользователей и их нужно обрабатывать по месту.