PDA

View Full Version : سوال: حلقه foreach برای TabPage



morteza norouzi
سه شنبه 25 آبان 1400, 10:27 صبح
با سلام خدمت دوستان و برنامه نویسان عزیز

یه تکه کد نوشتم برای اینکه هر آبجکت و یا کنترلی که داخل TabPage وجود داره رو بهم برگردونه! یعنی میخوام حلقه ای از جنس foreach باشه که تک تک کنترل ها و آبجت ها وخلاصه هر چی که داخل Tabpage ها هستش رو بهم برگردونه
در حال حاظراین کد رو نوشتم اما متاسفانه شرط حلقه برقرار نمیشه و عملا هیچ اتفاقی نمی افته

foreach (Control item in tabPage1.Controls)
{
MessageBox.Show("" + item.Text);
}


از دوستان اگه کسی بتونه کمک کنه خیلی ممنون میشم

mr.sirwan
سه شنبه 25 آبان 1400, 13:04 عصر
سلام، شما باید برای اینکار به شکل بازگشتی عمل کنید و به تمامی کنترل های داخل تب پیج دسترسی پیدا کنید، ممکنه داخل این تب پیج چندین پنل یا گروپ باکس وجود داشته باشه که داخل هرکدومشون هم تعدادی کنترل مثل چک باکس یا لیبل و ...

میتونید یه متد تعریف کنید به این شکل:
private void IterateOverTabPage(Control control)
{
foreach (Control child in control.Controls)
{
MessageBox.Show(child.Text);

IterateOverTabPage(child);
}
}

و درنهایت جایی که بهش نیاز دارین به این شکل فراخوانیش کنید:

IterateOverTabPage(tabPage1);

ebrahim.rayatparvar
سه شنبه 25 آبان 1400, 13:13 عصر
سلام دوست عزیز.
منظورتون از اینکه عملا کاری نمیکنه چیه؟؟
یعنی تو حلقه نمیره؟؟
دبیاگ کرین خط به خط؟؟
چون ببینید کد شما اوکیه و داخل حلقه باید ببینید تایپ هر آیتمی که میگیرید از چه نوعی هست و هر عملیاتب که میخواهید را انجام دهید.
اگر هم خطایی دارید عکس یا متن خطا را بزارید تا دوستان بهتر شما را راهنمایی کنند.

با تشکر
ابراهیم

morteza norouzi
چهارشنبه 26 آبان 1400, 10:38 صبح
سلام mr.sirwan عزیز خیلی ممنون بابت وقت و انرژی که برای سوال من گذاشتید

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

بعد از اینکه اجراش کنید داخل ریجستری سیستم توی مسیر HKEY_CURRENT_USER\SOFTWARE یه ریجستری به اسم پروژه WindowsFormsApp2 میسازه، بعدش به اسم هر TabPage یه پوشه توی همین مسیری که گفتم داخل ریجستری میسازه
در حال حاظر میخوام کنترل های داخل هر TabpPage رو داخل پوشه مربوطه خودش بسازه که ساخته نمیشه متاسفانه!
اگه بتونید کمکم کنید ممنون میشم


سلام، شما باید برای اینکار به شکل بازگشتی عمل کنید و به تمامی کنترل های داخل تب پیج دسترسی پیدا کنید، ممکنه داخل این تب پیج چندین پنل یا گروپ باکس وجود داشته باشه که داخل هرکدومشون هم تعدادی کنترل مثل چک باکس یا لیبل و ...

میتونید یه متد تعریف کنید به این شکل:
private void IterateOverTabPage(Control control)
{
foreach (Control child in control.Controls)
{
MessageBox.Show(child.Text);

IterateOverTabPage(child);
}
}

و درنهایت جایی که بهش نیاز دارین به این شکل فراخوانیش کنید:

IterateOverTabPage(tabPage1);

morteza norouzi
چهارشنبه 26 آبان 1400, 10:39 صبح
ابراهیم عزیز خیلی ممنونم ازت
پروژه رو همراه با توضیحات قرار دادم


سلام دوست عزیز.
منظورتون از اینکه عملا کاری نمیکنه چیه؟؟
یعنی تو حلقه نمیره؟؟
دبیاگ کرین خط به خط؟؟
چون ببینید کد شما اوکیه و داخل حلقه باید ببینید تایپ هر آیتمی که میگیرید از چه نوعی هست و هر عملیاتب که میخواهید را انجام دهید.
اگر هم خطایی دارید عکس یا متن خطا را بزارید تا دوستان بهتر شما را راهنمایی کنند.

با تشکر
ابراهیم

SajjadKhati
جمعه 28 آبان 1400, 11:49 صبح
سلام
اگه منظورتون رویداد toolStripButton1_Click هست ، چون قبل از اینکه به این رویداد برسین ، پنلِ مربوط به TabPage را در رویداد Form1_Load منتقل کردین .
بنابراین TabPage اصلا فرزندی در پروپرتیِ Controls اش نخواهد داشت .