چرا وقتی یک رویدادگردان Event Handler حذف می شود باید کدی که رویدادگردان را به رویداد نسبت می دهد، حذف شود؟!
همانطور که می دونید برای نسبت دادن یک رویداد گردان به یک رویداد به صورت زیر عمل می کنیم:
btn.Click += btnClickHandler;
public void btnClickHandler(object sender, EventHandler e)
{
}
حالا اتفاقی که می افته وقتی شما در Designer روی button دابل کلیک می کنید این دو بخش کد توسط designer در دو فایل جداگانه ایجاد می شه و این تصور برای شما پیش می یاد که خوب حالا که من این متد رو نمی خوام و پاکش می کنم، خود بخود اون کد هم در designer پاک می شه. اما این تنها سناریوی موجود نیست شما این حالت رو در نظر بگیرد:
فرض کنید نسبت دادن رویداد به رویدادگردان از طریق کد انجام شده باشد (نه توسط designer و در فایل مربوط به آن) در این صورت آیا باید با پاک شدن متد توسط شما اون قسمت از کد هم باید پاک شود!!!
به بیان ساده تر این حالت رو در نظر بگیرید که شما متد رو cut کردید و چند خط بالاتر یا پایین تر می خواین اون متد رو paste کنید. حالا اگر VS به محض پاک کردن متد اون خط کد معروف رو پاک کنه و سپس شما paste کنید که دیگه این متد می ره رو هوا !!! یعنی دیگه این متد به اون رویداد وصل نیست.
در حقیقت این امکان اگه وجود داشت یه جورایی کمک که نبود هیچی دردسر هم میشد. IDE فقط می تونه کمک کنه نه اینکه فضولی کنه تو کار برنامه نویس.
برای استفاده بهتر از VS توصیه می کنم Resharper رو نصب کنید (البته کم باعث کندی می شه) اونوقت می بینید که محیط VS خودش یک کلاس درس حرفه ای هست برای شما
در ضمن هیچ وقت فایل Designer رو به صورت دستی تغییر ندید زیرا با هر تغییر در فرم دوباره توسط Code Generator ویژوال استودیو ایجاد می شه (مگر اینکه واقعا بدونید کی مشکلی پیش نمیاد)
هیچ وقت Ignore نکنید چون ممکنه خیلی از کدها پاک بشه و حتما هم از یک Source control استفاده کنید که قطعا می کنید. با استفاده از Source control و گرفتن تغییرات Desginer می تونید به راحتی متوجه بشید که چرا فرم کرش شده.
در ضمن حتما می دونید که خالق سی شارپ چه کسی هست