PDA

View Full Version : تغییر خصوصیات اجزای یوزرکنترل در فرم پرنت



Mrs.Net
جمعه 12 مهر 1387, 21:28 عصر
یک یوزر کنترل معمولی که یک button داخل اون قرار داده شده
و بوسیله propertie این کلید در فرم اصلی قابل دسترس هست.
مشکلم از اینجا شروع میشه که:
این یوزرکنترل به فرمم اضافه کردم. تو حالت دیزاین به اون کلیدی که داخل یوزرکنترلم وجودداره دسترسی دارم. مقدار Text اونو عوض میکنم و نشونم میده که عوض شده. اما وقتی اجرا میکنم دوباره به حالت اول برمیگرده.
راه حلش چیه؟!

SMRAH1
شنبه 13 مهر 1387, 05:39 صبح
سلام

قطعا شما در جایی از برنامه،اقدام به تغییر متن دکمه می کنید.این مکان می تواند Init در UC یا InitalComponnent در فرم یا یک متد یا peoperty (احتمالا Browsable=false) یا حتی در خطوط دیگری از کد است.پیشنهاد من،فقط Debug کردن است تا جای دقیق را بیابید.یک گزینه مناسب ،دریافت رویداد TextChanged دکمه مورد نظر برای دیباگ است.

در هر حال اگر نمونه ای از کد را قرار دهید،بهتر می توان اظهار نظر کرد.

Mrs.Net
شنبه 13 مهر 1387, 09:19 صبح
هیچ کجای برنامه با کد کاری انجام نمیدم. مشکلم اینجاست که وقتی درحالت دیزاین مقدار تکست عوض میکنم. این مقدار جدید تو فرم برای کلید نمایش داده میشه. ولی وقتی F6 میزنم باز به حالت اول برمیگرده. یعنی هیچکجا این مقدار جدید نوشته نمیشه.
پروژه ی زیر باز کنید و کاری کنید که تو حالت دیزاین بشه تکست button عوض کرد.

SMRAH1
شنبه 13 مهر 1387, 10:29 صبح
سلام

1) پیشنهاد می کنم ،به جای در دسترس گذاشتن کل شی Button درون UserControl،فقط خاصیت هایی که لازم داریم را Public کنید (این با اصول برنامه نویسی OO هماهنگ تر است).برای نمونه خصوصیت ButtonText را معرفی و با آن Button.Text را مقدار دهی کنید.

2) برای رفع مشکل فعلی شما کافیست صفت DesignerSerializationVisibility از property Button را برابر Content قرار دهیم.به عبارت دیگر خط زیر را قبل از خصوصیت مذکور بیافزایید:

[DesignerSerializationVisibility(DesignerSerializat ionVisibility.Content)]در واقع کد شما در فایل UserControl.CS به شکل زیر در خواهد آمد:


public UserControl1()
{
InitializeComponent();
}

[DesignerSerializationVisibility(DesignerSerializat ionVisibility.Content)]
public Button Button
{
get { return button1; }
set { button1 = value; }
}با تنظیم این صفت،به Designer رسما اعلام می کنید که تغییرات انجام شده در این property را به هر شکل که لازم است، ذخیره کند (در InitComponent).امیدوارم اگر اشتباهی در رساندن منظور (یا کژ فهمی من) در رابطه با این صفت است،دوستان یادآوری کنند.

موفق باشید

Mrs.Net
شنبه 13 مهر 1387, 16:29 عصر
1) پیشنهاد می کنم ،به جای در دسترس گذاشتن کل شی Button درون UserControl،فقط خاصیت هایی که لازم داریم را Public کنید (این با اصول برنامه نویسی OO هماهنگ تر است).برای نمونه خصوصیت ButtonText را معرفی و با آن Button.Text را مقدار دهی کنید.
استفاده از کلید فقط یک مثال بود و برای حالتی که میخوام استفاده کنم باید تمام خصوصیات هارو به اشتراک بگذارم.


2) برای رفع مشکل فعلی شما کافیست صفت DesignerSerializationVisibility از property Button را برابر Content قرار دهیم.به عبارت دیگر خط زیر را قبل از خصوصیت مذکور بیافزایید:
بسیار عالی بود و ممنون.
با اطلاعات ناقصی که من دارم میدونم که برای کار درحالت دیزاین باید آبجکتها سریالایز بشن و با این دستور به دیباگر میگیم که چه قسمتی برای سریالایز استفاده بشه. (احتمال داره کاملا اشتباه گفته باشم)