the_king
مدیرکل انجمن
Designer مشکلی با اجرا کردن کد ها نداره، اما وقتی به دلیل ایراد در کدتون یک بخشی قابل اجرا نباشه، روتین ناقص اجرا میشن و ممکنه پیام خطایی هم نمایش داده نشه.خیلی ممنون استاد .
یه چیزی میگم ، فقط بهم نخندید.
اینکه دیزاینر وقتی میخواد کدی را اجرا کنه ، ممکنه یه خط را اجرا کنه و یه خط یا یه کد دیگه را اجرا نکنه؟
من توی این مدت که دارم با کدنویسی دیزاینر کار میکنم ، چیزهای بسیار عجیبی میبینم . چندین بار برام پیش اومد که کدهایی (اعم از MessageBox.Show و چیزهای دیگه) را اجرا نمیکنه . در واقع بهتره بگم که مثلا یه تابع (ای که قطعا مطمئنم فراخونی اش کردم رو فراخونی نمیکنه) یا یه رویدادی که قطعا مطمئنم زمانش رسید را اجرا نمیکنه .
مثلا توی رویداد کلیک 3 تا دکمه (که رویداد کلیک هر چند تاشون به یه رویداد یا متد متصل بود) ، هر چی کلیک میکردم ، کدها اجرا نمیشدن . تعجب کردم که شاید کلیک شون را متصل نکردم یا نام شی را اشتباه نوشتم و ... . رفتم دقیق چک کردم ، دیدم رویداد کلیک دقیق هر 3 دکمه ، به دقیقا همون متدم متصل بودن .
بعد ویژال استودیو رو بستم و دوباره باز کردم (بدون اینکه چیزی و کدی را تغییر داده باشم) ، دیدم این بار درست کار میکنه. اما یه مشکل .
کلا همیشه مشکل رو باید در کد خودتون جستجو کنید، اگر اجرای عجیب و غریبی داشته باشه بخاطر اشتباهی در کد نویسی شما است، Designer رو متهم نکنید.
باز ناچارم صحبت های قبلی رو تکرار کنم، مشخصه های یک شیء هر چقدر که تغییر کنه، شیء همچنان همون شیء ئه و تغییری نکرده. Designer هم ملاکش برای ذخیره کردن TransparentControlBitmap مقدار مشخصه است، اینکه داخل شیء چی میگذره رو ملاک قرار نمیده. اگر شما TransparentControlBitmap.DefautBitmap رو تغییر بدید، شیء TransparentControlBitmap که عوض نمیشه، همونه که بود.اما قضیه ی ثبت کردن مگه چجوری هه؟ الان ما این همه پروپرتی هاش (در پست های قبل ، مثل پروپرتی DefautBitmap و ... که معلوم شد تا فقط اگه شی جدیدی به TransparentControlBitmap بدیم را ثبت میکنه) را تغییر میدادیم ، چرا ثبت نمیکرد؟
من گفتم استاد ، از همون شی ، هر وقت دلش میخواست ثبت میکرد . روال مشخصی برای ثبت کردن نداره.
مادامی که شیء value در یک مشخصه همون مقدار قبلی باشه Designer تغییری به حساب نمیاره و دلیلی برای ذخیره کردن مجددش نمی بینه.
از فلگ می توانید استفاده کنید، اما در NET. روش های دیگه بکار برده شده، از فلگ استفاده نشده. یکی از روش هایی که برخی جاها بکار برده شده اینه که متغیر داخلی مشخصه بجای null یک مقدار خاص و مشخصی داشته باشه، ولی get مشخصه برای اون مقدار خاص مقدار پیشفرض رو برگردونه. فرضا مقدار اولیه StringFormat.GenericDefault باشه، نه null. و مشخصه وقتی متغیر داخلی مقدار StringFormat.GenericDefault داشت null رو برگردونه. یا فرضا مقدار backColor_ مقدار اولیه اش Color.Empty باشه، ولی get در BackColor وقتی مقدار backColor_ برابر Color.Empty بود، مقدار SystemColors.Control رو برگردونه. اینطوری اگه در مشخصه مقدار متغیر backColor_ برابر Color.Empty بود معلومه که هنوز مقدار دهی نشده ولی اگر غیر از Color.Empty بود مقدار دهی شده.یه چیز هم اینکه بجز اختصاص دادن متغییری به عنوان فلگ ، چجوری میشه متوجه شد که یه پروپرتی را آیا برنامه نویس مقدار null داد یا اینکه اصلا مقداردهی نشده و بخاطر مقداردهی نشدن هست که null هه؟
دوم اینکه مثلا وقتی داخل کلاس TransparentControlBitmap که هستیم ، میشه وقتی داخلِ یک متد که هستیم ، فهمید که الان این متد داره اجرا میشه ، آیا زمانِ دیزاینر هست (دیزاینر ویژال استودیو باعثِ اجرای این متد شده) یا زمانی که برنامه نویس ، برنامه را اجرا کرده؟
در نظر بگیرید در اینجور موارد اصولا اون متغیر داخلی مشخصه است که باید Serialize بشه، خود مشخصه رو Serialize نمی کنید.
بستگی به دید خودتون داره، ممکنه یک کنترل غیر فعال نیازی به ظاهر متفاوت نداشته باشه.بعد اینکه به نظرتون توی TransparentControlBitmap ، برای پروپرتیِ ControlDisabledBitmap ، قابلیت نال بذارم یا نذارم؟
ControlDisabledBitmap هم که بیت مپی هست وقتی که اون کنترل غیر فعال شد ، رسم میشه.
معنا نداره یه کنترل ، غیر فعال بشه اما رسم اش همون باقی بمونه و تغییری نکنه . درسته؟