خواهش می کنم سجاد جان،برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ارسالی توسط SajjadKhati برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
البته بازم میگم بنده استاد نیستم...
احتمالا وقتی در دات نت constructor به خط آخرش میرسه، CLR توابع گرافیکی رو اجرا می کنه که پنجره رسم بشه و بعد از اونه که ویندوز فرم رو به عنوان یه پنجره میشناسه. در سطح سی شارپ ما به دستورات بین آخرین خط Constructor و اولین خط رویداد Form_Load دسترسی نداریم ولی این قضیه تداخلی با مدیریت ترسیم کنترل ها روی فرم نداره. هر کنترلی داخل container یه z-order داره و هر container ی داخل فرم هم یک z-order مختص به خودش رو داره. ترتیب پیش فرض در z-order به ترتیب اضافه شدن اون کنترل داخل container بر می گرده. اگر نگاهی به تابع InitializeComponent در یه فرم بندازیم، کنترل ها به ترتیبی رسم میشن که داخل InitializeComponent به فرم اضافه شدن. به عبارتی پس از InitializeComponent، توابع JIT به هر کنترل یه z-order تخصیص میدن و در نهایت CLR به کارت گرافیک هندسه ی ترسیم رو ارسال می کنه.
-----------------------------------
سوال دوم ت رو هم الان متوجه شدم. وقتی یه کنترل رو invalid کنیم، تا زمانی که فرم idle نشه، اون کنترل paint نمیشه. حالا این که فرم کی idle میشه رو نمی دونم ولی اینجا فعلا اهمیتی نداره. ولی نکته اینه که اگر دو تا کنترل رو به ترتیب invalid کنیم، الزاما در زمان idle بودن فرم به همون ترتیب رسم نمیشن! در کدی که قرار دادی، transparetControl_2 اول و بعدش transparetControl1 نا معتبر میشه که درسته. ولی در ادامه اول transparetControl1 و بعدش transparetControl_2 رسم میشه. اگر بخوای بلافاصله یه کنترل رو رسم کنی می تونی از دستورات Update و Refresh استفاده کنی ولی شاید باز هم به هدف ت نرسی. اگر هدف اینه وقتی کاربر روی کنترل پشتی با اشاره گر ماوس وایستاد، اون کنترل بیاد جلو، فکر کنم در کد اولی که گذاشته بودی این اتفاق می افتاد. یه جورایی واسم گنگه که دقیقا میخوای چیکار کنی چون متوجه نشدم چرا یه نسخه ی جدید تر از کد اول قرار دادی! مشکل کد اول چی بوده؟!
شاد باشی
آرمین برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
Bookmarks