Здравствуйте, 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();
}
}
А если чисто исключения все заворачивать, то это ИМХО вообще не в тему. исключения — они не для пользователей и их нужно обрабатывать по месту.