PDA

View Full Version : آسانترین راه Override کردن یه متد برای چندین گریدویو



hamid_hr
دوشنبه 11 خرداد 1394, 19:34 عصر
سلام
من چند تا فرم دارم مثلا 20 تا
تو همشونم گرید ویو هست
حالا میخوام یه متد مثلا ProcessDialogKey رو برا همه گرید ویوهام Override کنم
یه راهش اینه که یه کلاس بسازم و از گرید ویو ارث بری کنه و تو فرم ها این کلاس رو به جای گرید ویو بزارم
این راه برا زمانی که پروژه بزرگه خیلی سخت میشه
راه اسونتری نداره که آیا؟

davidrobert
دوشنبه 11 خرداد 1394, 19:46 عصر
میخواهید انجام بدید مثلا من عمل Enter زدن در سلول های دیتاگرید ویو با زدن اینترنت بره ستون بعدی رو میخواستم امدم از دیتاگرید ویو به صورتی سفارشی ساختم کارم راحت شد و سرعت زیاد شد و همین طور یکی در میون سلول دیتاگرید ویو رو رنگش رو عوض میکنم تا دادش معلوم بشه بخاطر همین ساخت کامپوننت رو من توصیه میکنم و یک بار فقط کد نویسی انجام میدید.
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
base.ProcessTabKey(Keys.Tab);
return true;
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
base.ProcessTabKey(Keys.Tab);
return true;
}
return base.ProcessDataGridViewKey(e);
}

Davidd
سه شنبه 12 خرداد 1394, 08:35 صبح
سلام. راه اصولیش همونیه که خودتون گفتین که زیاد هم وقت گیر نیست. کافیه جاهایی که دیتاگریدها تعریف و new میشن کلاس DataGridView با کلاس جدیدی که ساختین replace کنین. اتفاقا در پروژه های بزرگ طراحی کلاس ها باید منطبق بر اصول باشه تا بعدا در نگهداری و توسعه به مشکل نخوره.
یه راه دیگه اینه که از extention method استفاده کنید.

hamid_hr
سه شنبه 12 خرداد 1394, 10:16 صبح
با extention method میشه یه متد رو override کرد؟
چطور؟

Davidd
سه شنبه 12 خرداد 1394, 10:26 صبح
با extention method میشه یه متد رو override کرد؟
چطور؟
نه override نمیشه کرد باید یه متد با نام جدید بسازید. برای ovrride کردن راهش همون وراثته.