ورود

View Full Version : چگونگی دسترسی به خصوصیات چند شی در حلقه for



picpars
جمعه 21 بهمن 1390, 16:36 عصر
با سلام
من تازه دارم با vb کار میکنم و اطلاعات ام کمه:خجالت: و الان هم یه مشکل برام پیش اومده اومیدوارم دوستان حمایت کنن:
من در یک فرم 10 تا Button دارم که نام آنها به صورت Button0, Button1 , Button2 و همین طور تا آخر یعنی Button9 برای تغییر رنگ همه اینها می خوام از یک حلقه for استفاده کنم.
مثلا برای Button0:
Button0.BackColor = Color.Black

حالا من میخوام با یک بار نوشتن این دستور همه 10 تا Button را با هم تغییر رنگ بدم یعنی باید توی حلقه با هر بار شمارش عدد 0 افزایش پیدا کنه که بشه Button1.BackColor = Color.Black و همین طور تا اخر

این برنامه رو چطوری باید بنویسیم؟:گیج:

دوستان ممنون میشم یه راهنمایی کنید
با تشکر

فرید نجفلو
جمعه 21 بهمن 1390, 16:48 عصر
Dim Cnt As Integer= 0
For Each Control In Me.Controls
If TypeOf Control Is Button AndAlso _
Control.Name = "Button" & Cnt Then
CType(Control, Button).BackColor= Color.Black
Cnt += 1
End If
Next

picpars
جمعه 21 بهمن 1390, 17:11 عصر
برنامه اولی که دوستمون Farid.N نوشت خطا نداشت ولی جواب نداد Button ها تغییر رنگ ندادن

و برنامه دومی هم که دوستمون mohammadriano نوشت خطا داره و اجرا نمیشه!

دوستان برنامه رو یه برسی دیگه کنید. ممنون

فرید نجفلو
جمعه 21 بهمن 1390, 17:21 عصر
dim i as integer
dim ax,a as string
for i = 1 to 9 step 1
ax = "Button" + Str(i)
a = Left$(ax, 6) + Right$(ax, 1)
ax.BackColor = Color.Black
next i


عجب ؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!!!!!!
آقا شما از کارکرد این کدی که نوشتین کاملا مطمئنید؟؟!!
لطف کنید قبل از راهنمایی دقت کنید

ax تو کد شما از نوع string هستش و string خاصیتی به نام BackColor نداره! و گیریم که داشته باشه ، حالا چه ربطی به دکمه مورد نظر داره!

درواقع باید اینطور نوشت:



Dim ax As String
For i As Integer= 1 To 9
ax = "Button" + CStr(i)
If Me.Controls.ContainsKey(ax)AndAlso TypeOf Me.Controls(ax) Is Button Then
CType(Me.Controls(ax),Button).BackColor = Color.Black
CType(Me.Controls(ax),Button).ForeColor = Color.Red
End If
Next i

picpars
جمعه 21 بهمن 1390, 17:29 عصر
Farid.N جان این هم نشد! من با ویژوال استدیو 2010 کار میکنم، قاعدتا نباید با برنامه هایی که شما زحمت نوشتن شو کشیدید مشکلی داشته باشه. اگه برنامه ویژوال رو سیستم تون نصب هست میشه خودتون هم یه امتحان کنید
بازهم تشکر میکنم

فرید نجفلو
جمعه 21 بهمن 1390, 18:29 عصر
پست آخرم اصلاح و تست شد

salehbagheri
جمعه 21 بهمن 1390, 18:36 عصر
یا به طور ساده تر میتونید به این شکل انجام بدید!


For Index As Integer = 0 To 9
CType(Me.Controls.Find("Button" & Index.ToString, False)(0), Button).BackColor = Color.AliceBlue
Next

picpars
جمعه 21 بهمن 1390, 18:54 عصر
با سلام مجدد!
من این کد جدید رو امتحان کردم بازم جواب نداد؟؟!! وقتی به دستور if میرسه شرط برقرار نمیشه و دستورات داخل اون اجرا نمیشه! نمیدوم مشکل چی؟

Hybrid
جمعه 21 بهمن 1390, 19:30 عصر
با سلام مجدد!
من این کد جدید رو امتحان کردم بازم جواب نداد؟؟!! وقتی به دستور if میرسه شرط برقرار نمیشه و دستورات داخل اون اجرا نمیشه! نمیدوم مشکل چی؟

سلام این نمونه برنامه رو که براتون نوشتم رو ببینین .کاملا تست شده و بدور از اشکاله.((فقط یک نکته اگه شما دکمه ها رو داخل GroupBox گذاشتین قضیه فرق میکنه اگه خواستین تا نمونه اونم رو واستون بنویسم))

دانلود (http://thelife.persiangig.com/other/WindowsApplication1.rar)

موفق باشید./

mohammadriano
جمعه 21 بهمن 1390, 23:20 عصر
عجب ؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!!!!!!
آقا شما از کارکرد این کدی که نوشتین کاملا مطمئنید؟؟!!
لطف کنید قبل از راهنمایی دقت کنید

ax تو کد شما از نوع string هستش و string خاصیتی به نام BackColor نداره! و گیریم که داشته باشه ، حالا چه ربطی به دکمه مورد نظر داره!

درواقع باید اینطور نوشت:



Dim ax As String
For i As Integer= 1 To 9
ax = "Button" + CStr(i)
If Me.Controls.ContainsKey(ax)AndAlso TypeOf Me.Controls(ax) Is Button Then
CType(Me.Controls(ax),Button).BackColor = Color.Black
CType(Me.Controls(ax),Button).ForeColor = Color.Red
End If
Next i

بله حق با شماست

mohammadriano
شنبه 22 بهمن 1390, 00:00 صبح
دوست عزیز می تونید یه کار ساده انجام بدین

Public Function Buttoncolor()
Me.Button1.BackColor = Color.Black
Me.Button2.BackColor = Color.Black
Me.Button3.BackColor = Color.Black
Me.Button4.BackColor = Color.Black
Me.Button5.BackColor = Color.Black
Me.Button6.BackColor = Color.Black
Me.Button7.BackColor = Color.Black
Me.Button8.BackColor = Color.Black
Me.Button9.BackColor = Color.Black
End Function

خب حالا فقط Buttoncolor رو به کار ببرید
البته یادت باشه فرم های شما هر 9 Button رو داشته باشن

alimanam
شنبه 22 بهمن 1390, 01:50 صبح
با سلام

ساده ترین روش کد زیره

Public Class Form1
Private m_Rnd As New Random
Private Function RandomColor() As Color
Return Color.FromArgb(255, _
m_Rnd.Next(0, 255), _
m_Rnd.Next(0, 255), _
m_Rnd.Next(0, 255))
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each ctrl As Button In Me.Controls
ctrl.BackColor = RandomColor()
Next
End Sub
End Class


موفق باشید./

shadi khanum
شنبه 22 بهمن 1390, 10:31 صبح
با سلام

ساده ترین روش کد زیره

Public Class Form1
Private m_Rnd As New Random
Private Function RandomColor() As Color
Return Color.FromArgb(255, _
m_Rnd.Next(0, 255), _
m_Rnd.Next(0, 255), _
m_Rnd.Next(0, 255))
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each ctrl As Button In Me.Controls
ctrl.BackColor = RandomColor()
Next
End Sub
End Class


موفق باشید./
دوست عزیز کدی که نوشتید اشتباهه و اگه یه بار تست میکردید متوجه میشدید.. و دلیل اون هم اینه که AS تست نمیکنه که آیا این عملیات Casting که داره انجام میده معتبر و قابل انجام یا نه و اول cast میکنه بعد وارد for میشه .. یعنی اول type دو طرف AS رو با هم مقایسه نمیکنه که از یک نوع و قابل Cast باشن.. واسه همین اگر توی فرم کنترلی به جز button باشه چون میخواد به button اونو cast کنه و نمیتونه به Error بر میخوره.. موفق باشید

alimanam
شنبه 22 بهمن 1390, 14:44 عصر
با سلام

کدی که ذکر کردم با توجه به مطالب عنوان شده , در متن پست اول بود صحبت شما کاملا درسته و حرفی درش نیست معمولاً کدی مینویسیم متناسب با درخواست برنامه به طور مثال هیچ وقت نمیائیم برای یک برنامه ماشین حساب معمولی که قراره برای یک دانشجوی حسابداری هست دکمه محاسبه زوایای مثلثاتی بنویسیم !!! به هرحال با تغییر کد بالا این مشکل قابل حله :

For Each ctrl In Me.Controls
If TypeOf ctrl Is Button Then ctrl.BackColor = RandomColor()
Next


موفق باشید./