PDA

View Full Version : تغيير ويژگي كنترل از داخل كلاس



cprogram
پنج شنبه 15 مهر 1389, 15:35 عصر
سلام.
من ميخواستم از داخل يك كلاس لايبري كه خودم به پروژه اضافه كردمو كنترلهاي روي فرم اصلي رو كنتركنم. مثلا متن TextBox رو تغيير بدم.

بهتره اینجوری مشکلم رو مطرح کنم. ویژگی های کنترلها از داخل کلاسها قابل دسترس نیستند. برای دسترسی به این ویژگیها چه تغییراتی در کدهای پیش فرض تولید شده توسط ویژوال استدیو بدم. یا از چه طریق میتونم دسترسی پیدا کنم.

پروژه من يك فرم با چند تاكنترل و يه كلاس هست.
لطفا راهنمايي كنيد.

mohammad272005
پنج شنبه 15 مهر 1389, 18:22 عصر
دوتا راه حل به نظرم میاد
1- controlی که قراره تغیر کنه، به عنوان پارامتر به متد مورد نظر بفرستید. حالا این متد هرجا میخواد باشه.
2- یه interface تو دل DLL درست کنید و کنترلهای مربوطه رو در اون معرفی کنید. بعد اون interface رو تو فرم مورد نظر implement کنید و controlهای مورد درخواست رو تحویل متدها بدید.
خواستید در مورد هر کدوم توضیح می دم.

cprogram
پنج شنبه 15 مهر 1389, 19:14 عصر
در مورد راه حل اولتون: بله. میشه یه کنترل رو به یه متد داد و به این شکل ویژگی هاشو تغییر داد. ولی داستان از این قراره که من میخوام با یه فاصله زمانی چندتا کنترل رو با یه اطلاعات خاص پر کنم. برا همین میخوام یه کلاس بنویسم تا این کارو بکنه. مشکل اینه که از داخل کلاس به کنترلها دسترسی ندارم.
در مورد راه حل دومتون: من نفهمیدم چطوری باید این کارو بکنم. نیاز به توضیح بیشتر دارم.

daneshjoo2
پنج شنبه 15 مهر 1389, 19:46 عصر
سلام
میتونید از پترن های decorator و adapter استفاده کنید، هر دو تو این مورد کاربرد دارن... به سرچی بزنید مطلب در موردشون زیاده.
طریقه استفادشون تقریبا تو همین فرمیه که آقای mohammad272005 (http://barnamenevis.org/forum/member.php?u=43326) توضیح دادن ولی خوب اصولی تر و راحت تره.

cprogram
پنج شنبه 15 مهر 1389, 23:42 عصر
سلام
میتونید از پترن های decorator و adapter استفاده کنید، هر دو تو این مورد کاربرد دارن... به سرچی بزنید مطلب در موردشون زیاده.
طریقه استفادشون تقریبا تو همین فرمیه که آقای mohammad272005 (http://barnamenevis.org/forum/member.php?u=43326) توضیح دادن ولی خوب اصولی تر و راحت تره.


در مورد این پترن هایی که شما اشاره کردید، جستجو کردم ولی مطلب زیادی دستگیرم نشد. من با پترنها کار نکردم. اگه میشه کمی بیشتر توضیح بدین.

بهتره اینجوری مشکلم رو مطرح کنم. ویژگی های کنترلها از داخل کلاسها قابل دسترس نیست. برای دسترسی به این ویژگیها چه تغییراتی در کدهای پیش فرض تولید شده توسط ویژوال استدیو بدم. یا از چه طریق میتونم دسترسی پیدا کنم.

cprogram
جمعه 16 مهر 1389, 20:15 عصر
یه کد گذاشتم تا مشکل رو بتونم دقیق بگم. اگه میشه بررسی کنید. ممنون میشم.

AmirAmiri
جمعه 16 مهر 1389, 20:38 عصر
سلام.
فکر کنم مشکلت با این کد حل بشه.
برنامه ای که گذاشتی رو تغییر دادم و ضمیمه کردم.
موفق و پیروز باشی.

cprogram
جمعه 16 مهر 1389, 20:42 عصر
دوتا راه حل به نظرم میاد
1- controlی که قراره تغیر کنه، به عنوان پارامتر به متد مورد نظر بفرستید. حالا این متد هرجا میخواد باشه.
2- یه interface تو دل DLL درست کنید و کنترلهای مربوطه رو در اون معرفی کنید. بعد اون interface رو تو فرم مورد نظر implement کنید و controlهای مورد درخواست رو تحویل متدها بدید.
خواستید در مورد هر کدوم توضیح می دم.

در مورد راه اولتون: درسته ولی برای تغییر تعداد زیاد کنترل کدنویسی زیادی داره.
یه کد نوشتم که اگه یه نگاهش کنید مشکل منو عمیقا درک میکنید.
در مورد راه دوم هیچ نظری ندارم چون هیچ اطلاعاتی ندارم ونیاز به توضیحات بیشتر دارم.
ممنونم.

cprogram
جمعه 16 مهر 1389, 20:53 عصر
سلام.
فکر کنم مشکلت با این کد حل بشه.
برنامه ای که گذاشتی رو تغییر دادم و ضمیمه کردم.
موفق و پیروز باشی.

درسته. ولی تو این روش شما باید برا تغییر دادن هر کنترل یه متد بنویسم. یه کد دیگه تو تاپیک بالا اضافه کردم. اگه بخوام چند تا کنترل رو یه جا تغییر بدم چی کار کنم. این کد رو بیزحمت بررسی کنید.