PDA

View Full Version : مشکل در گردش بین کنترل های فرم



ahmad24shargh
شنبه 13 خرداد 1396, 12:20 عصر
سلام
برای یادگیری C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ از محیط توسعه SharpDevelop 5.1 استفاده میکنم.(C#‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎ 6 - MSBUILD 14)
هنگامی که فرم اصلی برنامه Right To Left بشه،نمیشه از تصویر برای بک گراند استفاده کرد.برای غلبه بر این مشکل از PictureBox (که خصوصیت Dock روی Fill تنظیم شده) استفاده می کنم.
مشکلی که ایجاد میشه از دست دادن خاصیت Transparency کنترلهای Label هست.
برای رفع مشکل باید برای هر Label دو خط کد به صورت زیر بعد از InitializeComponents نوشته بشه :


this.lblFullName.Parent = pictureBox1;
this.lblFullName.BackColor = Color.Transparent;

از آنجایی که فرم چند لیبل داره میخوام به جای استفاده از نام هر لیبل با گردش بین کنترلهای فرم تمام لیبلها رو یکباره دستکاری کنم :


foreach(var c in this.Controls.OfType<Label>())
{
c.Parent = pictureBox1;
c.BackColor = Color.Transparent;
//c.Text = "checked";
}


استفاده از این حلقه foreach یا هر ساختار کد دیگه(فراخوانی متدهای static گوناگون) همگی یه مشکل ایجاد میکنند.یکی از Label ها پردازش نمیشه.اگر 2 لیبل باشه یکی
بدون تغییر میمونه،اگر 3 لیبل باشه هم همینطور و ....

این در حالیکه طوری که دیدم حلقه دقیقاً به تعداد لیبلها تکرار میشه اما یکی از Label ها 2 بار در حلقه پردازش میشه و یکی دیگه اصلا پردازش نمیشه.
بارها لیبلها رو حذف و اضافه کردم تو تعداد متغیر.این مشکل وجود داره

خیلی کنجکاوم بدونم چرا حلقه foreach اینجوری عمل میکنه.لطفاً راهنمایی کنید.

---------------------------------------
یکی از لیبلها که در سمت راست TextBox قرار داره پس از اعمال این تغییرات از یک سمت TextBox به سمت دیگه میره به همین خاط تو Design اونو سمت چپ میذارم پس از کامپایل و رندر موقع اجرا در سمت راست قرار میگیره.این دیگه چرا اینجوری میشه؟؟