PDA

View Full Version : سوال: کمک در مورد حلقه for Each



Hadiir.net
سه شنبه 21 خرداد 1392, 07:21 صبح
سلام

من دارم یه تقویم جدولی طراحی میکنم با استفاده از کنترل پنل و تعدادی لیبل یا برچسب ممکنه بگین چطور میتونم توسط حلقه (for each) به خصوصیات هر کدوم از لیبل ها دسترسی داشته باشم؟

من یه کدی شبیه به کد زیر توی برنامه ام گذاشتم اما نمیدونم چرا به کنترل های داخل پنلها اشاره نمیکنه و در واقع به لیبل های داخل پنل ها دستری ندارم ممکنه بگین کد صحیح که بتونم به خصوصیات مثلا نام هر لیبل دسترسی داشته باشم چطوریه؟
تشکر

نمونه کدی که من استفاده میکنم (ولی متاسفانه مشکلی که توضیح دادم رو داره):




Dim TxtX As System.Windows.Forms.Control
For Each TxtX In Me.Controls
If TypeOf TxtX Is System.Windows.Forms.TextBox Then
TxtX.BackColor = RGB(100, 100, 100)
End If
Next TxtX

davood_mortazavi
سه شنبه 21 خرداد 1392, 08:26 صبح
قکر کنم به جای me.contorol باید نام panel و بعد کنترل را بنویسید

Naghibi
سه شنبه 21 خرداد 1392, 11:29 صبح
این حلقه فقط کنترل های روی همون سطح رو نشون میده و چون کنترل های درون پنل یک سطح پایین تر هستند، اونا نشون داده نمیشن. برای رفع این مشکل باید این حلقه رو توی یک تابع بنویسی و به صورت بازگشتی فراخوانی کنی.




private sub findControls(byval CN as control)

For Each C In CN.Controls

If TypeOf (C) Is GroupBox Then
findControls(C)

ElseIf TypeOf (C) Is TextBox Then

End If

Next

cloner
سه شنبه 21 خرداد 1392, 11:36 صبح
درود.
باید به جای ME.Controls بنویسید panel.Controls که بع جای Panel باید نام پنل رو بنویسید و همچنین به جای تکست باکس باید تایپ کنترل رو با لیبل مقایسه کنید.

tooraj_azizi_1035
سه شنبه 21 خرداد 1392, 12:08 عصر
If و تعریف TxtX اضافه است. Panel1 نام Panel شماست:

For Each TxtX In Panel1.Controls.OfType(Of TextBox)


TxtX.BackColor = RGB(100, 100, 100)


Next TxtX

Hadiir.net
چهارشنبه 22 خرداد 1392, 01:50 صبح
من برای طراحی این تقویم از تعدادی کنترل (پنل) و (لیبل) استفاده کردم. البته در واقع از چند لایه (پنل) استفاده کردم، یک پنل اصلی، در درونش یک پنل در سمت راست برای روزهای هفته و یک پنل هم در سمت چپ برای روزهای ماه.
پنل سمت چپ خودش دارای 6 پنل ستونی و هر ستون هم دارای 7 پنل دیگه که برای هر لیبل در نظر گرفته شده است که جمعا شامل 42 پنل است.

همونطور که توضیح دادم اوضاع یه خورده پیچیده و تو در تو شده اما من برای اینکه تمرکز بیشتری روی کنترل ها داشته باشم از این روش استفاده کردم.
ممنونم از شما با کمی تغییر مشکلم کاملا حل شد.





For Each XPnlCel In Panel_X_Left.Controls.OfType(Of Panel)()
'Debug.Print(XPnlCel.Name)
For Each XPnl In XPnlCel.Controls.OfType(Of Panel)()
Debug.Print(XPnl.Name)
Next
Next XPnlCel

davood_mortazavi
چهارشنبه 22 خرداد 1392, 07:47 صبح
سلام / میشه سورس تقویمتون را اینجا بگذارید.
تشکر