PDA

View Full Version : سوال: مشکل این کد چیه؟



vb8334
پنج شنبه 05 فروردین 1389, 12:14 عصر
با سلام به تمامی دوستان

دوستان من زمانی از این کد توی فرم لود استفاده می کنم به جای اینکه 9 تا لیبل رو باید ایجاد کنه فقط یه دونه رو ایجاد می کنه ولی وقتی این دستور توی یه کامند می نویسم به خوبی این
کد کار می کنه در ضمن چطوری می تونم لیبل ها زمانی که فرم لود شد به این صورت نمایش
داده بشن

0 0 0
0 0 0
0 0 0
ممنون میشم کمکم کنید


Private Sub playfrm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


lbl(id) = New Label
lbl(id).BackColor = Color.Transparent
lbl(id).Tag = id
lbl(id).Text = id
Me.Controls.Add(lbl(id))

lbl(id).Location = New Point(35, loc + 30)
loc = lbl(id).Location.Y
AddHandler lbl(id).MouseClick, AddressOf label_Mouseclick
id = id + 1

End sub

Private Sub label_Mouseclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
la = CType(sender, Label)
index = la.Tag
lbl(1).BackColor = Color.Azure
End Sub

spring69
پنج شنبه 05 فروردین 1389, 16:06 عصر
سلام.
این کد رو امتحان کن:


Public Class Form1
Dim lbl(3) As Label
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim l As Integer
Dim t As Integer
For d As Integer = 0 To 2
For id As Integer = 0 To 3
lbl(id) = New Label
lbl(id).BackColor = Color.Transparent
lbl(id).Tag = id
lbl(id).Text = id
lbl(id).Width = 20
lbl(id).BackColor = Color.Red
lbl(id).Left = l
lbl(id).Top = t
lbl(id).Text = "0"
AddHandler lbl(id).MouseClick, AddressOf label_Mouseclick
Me.Controls.Add(lbl(id))
l += 20
Next
l = 0
t += 25
Next
End Sub

Private Sub label_Mouseclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim la As Label = CType(sender, Label)
Dim index As Integer = la.Tag
la.BackColor = Color.Azure
End Sub
End Class

دوست من، حدسم اینه که داری بازی دوز مینویسی. به همین خاطر واست یه بازی دوز گذاشتم (البته با C#‎) که تقریبا خودم نوشتمش. فک کنم بتونی ازش ایده بگیری.
امیدوارم برات مفید باشه.

vb8334
پنج شنبه 05 فروردین 1389, 19:17 عصر
دوست عزیز ممنون از اینکه جوابم رو میدید

دوست عزیز کد شما زمانی که من رو لیبل های بالایی کلیک می کنم اصلا
کلیک جواب نمیده وقتی روی لیبل بالایی ها کلیک می کنی آخرین سطر از لیبل ها جواب میده
به طور واقعی سطر آخر لیبل کار میکنه و لیبل های بالایی اصلآ جواب نمیده


ممنون

spring69
پنج شنبه 05 فروردین 1389, 22:08 عصر
دوست عزیز ممنون از اینکه جوابم رو میدید

دوست عزیز کد شما زمانی که من رو لیبل های بالایی کلیک می کنم اصلا
کلیک جواب نمیده وقتی روی لیبل بالایی ها کلیک می کنی آخرین سطر از لیبل ها جواب میده
به طور واقعی سطر آخر لیبل کار میکنه و لیبل های بالایی اصلآ جواب نمیده


ممنون

سلام.
ببخشید، توی خط آخر به جای lbl(index) بنویس: la (توی همون پست قبلی هم ویرایشش کردم)

یا کلا کدت رو عوض کن و از کد زیر استفاده کن(فکر کنم بهتر باشه، چون اینطوری مثل یه ماتریس باهاشون برخورد میکنی):


Public Class Form1
Dim lbl(2, 2) As Label
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim l As Integer
Dim t As Integer
For d As Integer = 0 To 2
For id As Integer = 0 To 2
lbl(d, id) = New Label
lbl(d, id).BackColor = Color.Transparent
lbl(d, id).Text = id
lbl(d, id).Width = 20
lbl(d, id).BackColor = Color.Red
lbl(d, id).Left = l
lbl(d, id).Top = t
lbl(d, id).Text = "0"
AddHandler lbl(d, id).MouseClick, AddressOf label_Mouseclick
Me.Controls.Add(lbl(d, id))
l += 20
Next
l = 0
t += 25
Next
End Sub

Private Sub label_Mouseclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim la As Label = CType(sender, Label)
Dim index As String = la.Tag
la.BackColor = Color.Azure
End Sub

End Class

vb8334
پنج شنبه 05 فروردین 1389, 22:35 عصر
ممنون خیلی خوب بود فقط یه چیز دیگه ببخشید زیاد سوال می کنم

دوست عزیز چرا وقتی این کد رو می نویسم

خطا میده:IndexOutOfRangeExeception


Private Sub label_Mouseclick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim la As Label = CType(sender, Label)
Dim index As String = la.Tag
Dim random As Integer
random = Int(Rnd() * 2)
If random = 1 Then lbl(index, index).Text = "x" Else lbl(index, index).Text = "o"

If lbl(1, 2).Text = "x" And lbl(1, 3).Text = "x" Then
Call x()

End If
End Sub


ممنون

spring69
جمعه 06 فروردین 1389, 02:09 صبح
سلام.
از دقیقا از کدوم خط ارور میده.
کد کامل صفحتو بذار که ببینم آرایتو چندتایی در نظر گرفتی.
اگه از خط If lbl(1, 2).Text = "x" And lbl(1, 3).Text = "x" Then ارور میده، ممکنه اون 3 که نوشتی خارج از محدوده آرایت باشه. یعنی مثلا آرایتو اینطوری تعریف کردی (2,2)lbl ولی 3 رو بکار بردی که خارج از محدودس.

اگه میشه هدفت رو از نوشتن این کد بگو. (گرفتن عدد تصادفی)

vb8334
جمعه 06 فروردین 1389, 10:52 صبح
ممنون از اینکه کمکم می کنید

بله دقیقآ همین خطی که خودتوتن نوشتید

هدف من از نوشتن این کد اینکه ابتدا یه عدد تصادفی در بیارم که مثلآ اگه عدد تصادفی یک
شد یعنی این که بازیکن اول مثلآ x هستش در غیر اینصورت o هستش
بعد با استفاده از این خطی هم که ارور میده با هم مقایسشون می کنم
که اگه مثلآ 3 تا از لیبلها تکستهاشون مثلآ برابر x بود اون برنده هست

ولی متآسفانه باز هم ارور میده و فقط لیبل اولی کار میکنه

ممنون

spring69
جمعه 06 فروردین 1389, 21:12 عصر
سلام.
همونطور که گفتم احتمال زیاد اشکال از همون (1,3) که نوشتی. اون رو به (1و2) تغییر دادی ببینی مشکلت حل میشه یا نه؟
اگه حل نشد کد کامل صفحه رو بزار تا بدونم که چیکار کردی.
اصلا لازم نیست که عدد تصادفی ایجاد کنی. چون طبق قانون بازی دوز ابتدا کاربر X بازی میکنه، بعدش نوبت کاربر O میشه و برعکس.

vb8334
شنبه 07 فروردین 1389, 14:37 عصر
ممنون دوست عزیز مشکلم حل شد

فقط چطوری تعیین کنم که اول مثلآ x شروع کنه بعد o یا مثلا برعکس

ممنون

spring69
شنبه 07 فروردین 1389, 18:42 عصر
سلام.

اون برنامه اي رو كه تو پست دوم برات گذاشتم رو دانلود كن جوابت رو ميگيري.
موفق باشيد.