PDA

View Full Version : سوال: جابجایی متن لیبل ها



kingdaniyal
جمعه 24 آذر 1391, 19:44 عصر
سلام دوستان عزیز
ببینید من یه سری دکمه (60 تا:لبخندساده:) روی فرم اصلیم گذاشتم که جلوی هرکدومشون یه لیبل هست.وقتی روی هر دکمه کلیک میکنم یه متن مثلا 1 را روی لیبل روبرو ظاهر میکنه.
یک دکمه هم دارم که روی اون نوشته از نو سازی
حالا میخوام هر بار که وارد بازی میشم وقتی روی اون دکمه ها کلیک کردم متن را عوض کرده باشه یعنی مثلا متن لیبل 2 رو اورده باشه برا لیبل 1 و برعکس. همچنین وقتی روی اون دکمه (از نو سازی)کلیک کردم متن ها جابجا بشهیعنی دوباره هم پاک بشه و هم جابجا بشه

لطفا کمکم کنید خیلی نیازش دارم.:گریه:

kingdaniyal
جمعه 24 آذر 1391, 21:30 عصر
ای دمتون گرم یعنی کسی بلد نیست؟:گریه:

rezaprogrammer
جمعه 24 آذر 1391, 23:57 عصر
مین روب داری می نویسی؟

به هر حال باید این حالات رو به صورت رندوم انجام بده. باید از تابع Random استفاده کنی. حالات رو از قبل مشخص کنی و مثلاً در یک آرایه قرار بدی تا اونارو به صورت رندوم بخونه و توسط حلقه در لیبل ها قرار بده

kingdaniyal
شنبه 25 آذر 1391, 15:55 عصر
یه چیزی تو ماایه های مین روبه:لبخندساده:
اگه میشه کدش رو قرار بده اگه سورس هم باشه که چه بهتر:قلب:

SHD.NET
شنبه 25 آذر 1391, 20:24 عصر
داداش اگه میتونی سورسشو بزار تا ببینم چکار میتونم بکنم . آخه اینجوری نمیشه ....

tstsst
شنبه 25 آذر 1391, 20:39 عصر
سلام
کامل نفهمیدم ولی این کد دوتادوتا متن لیبل ها رو عوض می کنه
Dim a As String = Nothing
Dim ai, ii As Integer
ai = 0
For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
If ai = 0 Then
a = Me.Controls(i).Text
ai = 1
ii = i
Else
Me.Controls(ii).Text = Me.Controls(i).Text
Me.Controls(i).Text = a
ai = 0
End If
End If
Next


برای پاک کردن تمام لیبلا هم که معلومه


For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
Me.Controls(i).Text = Nothing
End If
Next

rezaprogrammer
شنبه 25 آذر 1391, 21:07 عصر
اینو ببین بدرد می خوره.

Public Class Form1
Public tpos As Integer = 100
Public lpos As Integer = 25
Public counter As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Call myform()
Do Until counter = 8
counter += 1
Call btnrow()
lpos += 25
tpos -= 200
Loop
End Sub
Private Sub myform()
Me.Height = 350
Me.Width = 250
Me.Label1.Location = New System.Drawing.Point(185, 50)
Me.Label2.Location = New System.Drawing.Point(25, 50)
Me.smilebtn.Size = New Size(25, 25)
Me.smilebtn.Location = New System.Drawing.Point(112, 50)
End Sub
Private Sub btnrow()

Dim mycollection As New Collection
Dim myarray(0 To 8, 0 To 8) As String
Dim counter As Integer
Do Until counter = 8
counter += 1
Dim button1 As New Button
With button1
.BackColor = Color.Gray
.Size = New Size(25, 25)
.Top = tpos
.Left = lpos
.Name = (tpos & "," & lpos)
'button1.Location = New Point(tpos, lpos)
Me.Controls.Add(button1)
mycollection.Add(button1.Name)
myarray(0, 1) = button1.Name
End With
tpos += 25

Loop
Dim mylastname As String


mylastname = mycollection.Item(1)

MsgBox(mylastname)
End Sub


Private Sub NewToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripMenuItem.Click

End Sub

Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
Me.Close()
End Sub

Private Sub HelpToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HelpToolStripMenuItem.Click
MsgBox("I need !@#$ Help")
End Sub

Private Sub BeginnerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeginnerToolStripMenuItem.Click
BeginnerToolStripMenuItem.Checked = True
IntermediateToolStripMenuItem.Checked = False
ExpertToolStripMenuItem.Checked = False
End Sub

Private Sub IntermediateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IntermediateToolStripMenuItem.Click
BeginnerToolStripMenuItem.Checked = False
IntermediateToolStripMenuItem.Checked = True
ExpertToolStripMenuItem.Checked = False
End Sub

Private Sub ExpertToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExpertToolStripMenuItem.Click
BeginnerToolStripMenuItem.Checked = False
IntermediateToolStripMenuItem.Checked = False
ExpertToolStripMenuItem.Checked = True
End Sub

Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click



End Sub

Private Sub smilebtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles smilebtn.Click

End Sub
End Class

rezaprogrammer
شنبه 25 آذر 1391, 21:08 عصر
اینم هست

Option Explicit

Dim XMaze As Long
Dim YMaze As Long
Dim Bomb As Long
Dim CellsLeft As Long

Private Sub InitMaze()
Dim i As Integer
Dim x As Long

Randomize Timer
For i = 0 To XMaze * YMaze - 1
With pctCell(i)
If .BorderStyle = 0 Then
.BorderStyle = 1
.Cls
.Tag = ""
End If
If .BackColor <> vb3DLight Then
.BackColor = vb3DLight
End If
.ZOrder 0
End With
Next
For i = 1 To Bomb
Do
x = CInt(Rnd * XMaze * YMaze)
Loop Until pctCell(x).Tag = ""
pctCell(x).Tag = "B"
Next
CellsLeft = (XMaze * YMaze) - Bomb
End Sub

Private Sub Form_Load()
Dim i As Integer

pctCell(0).AutoRedraw = True
pctCell(0).Font = "Verdana"
pctCell(0).FontSize = 8
pctCell(0).FontBold = True
XMaze = 15
YMaze = 15
Bomb = 45
For i = 1 To XMaze * YMaze - 1
Load pctCell(i)
pctCell(i).Move pctCell(0).Left + pctCell(0).Width * (i Mod XMaze), pctCell(0).Top + pctCell(0).Height * (i XMaze), pctCell(0).Width, pctCell(0).Height
pctCell(i).Visible = True
Next
InitMaze
End Sub

Private Sub BombCount(ByVal Index As Long)
Dim x As Integer
Dim y As Integer
Dim Count As Integer

Count = 0
pctCell(Index).Tag = "X"
For x = (Index Mod XMaze) - 1 To (Index Mod XMaze) + 1
For y = (Index XMaze) - 1 To (Index XMaze) + 1
If x >= 0 And y >= 0 And x < XMaze And y < YMaze Then
If pctCell(x + y * XMaze).Tag = "B" Then
Count = Count + 1
End If
End If
Next
Next
If Count = 0 Then
For x = (Index Mod XMaze) - 1 To (Index Mod XMaze) + 1
For y = (Index XMaze) - 1 To (Index XMaze) + 1
If x >= 0 And y >= 0 And x < XMaze And y < YMaze Then
If pctCell(x + y * XMaze).Tag = "" And pctCell(x + y * XMaze).BorderStyle = 1 Then
BombCount x + y * XMaze
End If
End If
Next
Next
End If
pctCell(Index).ZOrder 1
pctCell(Index).BorderStyle = 0
pctCell(Index).BackColor = vb3DLight
If Count > 0 Then
pctCell(Index).CurrentX = 0
pctCell(Index).CurrentY = 0
pctCell(Index).ForeColor = QBColor(Count)
pctCell(Index).Print Count
End If
CellsLeft = CellsLeft - 1
If CellsLeft = 0 Then
ShowMaze
MsgBox "You Win!", vbInformation, "You Win"
InitMaze
End If
End Sub

Private Sub ClearXTag()
Dim i As Integer

For i = 0 To XMaze * YMaze - 1
If pctCell(i).Tag = "X" Then pctCell(i).Tag = ""
Next
End Sub

Private Sub ShowMaze()
Dim i As Integer

For i = 0 To XMaze * YMaze - 1
If pctCell(i).Tag = "B" Then
pctCell(i).BackColor = vbYellow
pctCell(i).BorderStyle = 0
pctCell(i).ForeColor = vbRed
pctCell(i).CurrentX = 0
pctCell(i).CurrentY = 0
pctCell(i).Print "B"
End If
Next
End Sub

Private Sub pctCell_MouseUp(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)
If pctCell(Index).BorderStyle = 1 Then
If Button = vbLeftButton Then
If pctCell(Index).Tag = "B" Then
pctCell(Index).BackColor = vbYellow
pctCell(Index).BorderStyle = 0
pctCell(Index).ForeColor = vbRed
pctCell(Index).CurrentX = 0
pctCell(Index).CurrentY = 0
pctCell(Index).Print "B"
ShowMaze
MsgBox "Bomb!", vbCritical, "Bomb"
InitMaze
Else
BombCount Index
ClearXTag
End If
ElseIf Button = vbRightButton Then
If pctCell(Index).BackColor = vb3DLight Then
pctCell(Index).BackColor = vbRed
ElseIf pctCell(Index).BackColor = vbRed Then
pctCell(Index).BackColor = vbBlue
Else
pctCell(Index).BackColor = vb3DLight
End If
End If
End If
End Sub

rezaprogrammer
شنبه 25 آذر 1391, 21:11 عصر
لینکای بازی مین روب:
لینک 1 (https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4155&lngWId=10)
لینک 2 (http://www.codeproject.com/Articles/15362/Skinable-Minesweeper-Clone)

یه برنامه که به گفته طراحش کامل نیست:

96739

kingdaniyal
یک شنبه 26 آذر 1391, 13:59 عصر
سلام
کامل نفهمیدم ولی این کد دوتادوتا متن لیبل ها رو عوض می کنه
Dim a As String = Nothing
Dim ai, ii As Integer
ai = 0
For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
If ai = 0 Then
a = Me.Controls(i).Text
ai = 1
ii = i
Else
Me.Controls(ii).Text = Me.Controls(i).Text
Me.Controls(i).Text = a
ai = 0
End If
End If
Next


برای پاک کردن تمام لیبلا هم که معلومه


For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
Me.Controls(i).Text = Nothing
End If
Next


این کدش تغزیبا خوب بود اما من میخوام این کارو وقتی متن لیبیل ها خالیه انجام بده
مثلا وقتی قراره ری دکمه 1 کلیک کنم متن اول رو نشون بده این متن رو وقتی روی دکمه 25 کلیک کردم نشون بده و همینجور هی جاباجا کنه
البته این کد 2 تا متن رو فقط با هم جابجا میکنه من میخوام یهو کل متن ها جابجا کنه

tstsst
یک شنبه 26 آذر 1391, 14:34 عصر
این کدش تغزیبا خوب بود اما من میخوام این کارو وقتی متن لیبیل ها خالیه انجام بده
مثلا وقتی قراره ری دکمه 1 کلیک کنم متن اول رو نشون بده این متن رو وقتی روی دکمه 25 کلیک کردم نشون بده و همینجور هی جاباجا کنه
البته این کد 2 تا متن رو فقط با هم جابجا میکنه من میخوام یهو کل متن ها جابجا کنه

متن شما پر از ایهام بود
شما می خواین مثلا کلید 1 تمام لیبل ها رو به یک نام تغییر بده کلید 2 به یک نام دیگه تا آخر ؟!
یا یک سری متن سابت دارین با کلیک رو هر کدوم نمایش داده بشه ؟!
یا متن از دکمه اول تا دکمه دومی که کلیک میشه لیبل هارو پر کنه؟!
یا وقتی رو دکمه یک کلیک کردین لیبل رو بروش یک متن بشه و وقتی رو دکمه دیگه ای کلیک کردین متن لیبل اول به لیبل جدید منتغل بشه ؟!
اون کدی که من نوشتم میاد تمام کنترول های فرمو می خونه هرکدوم لیبل بود عمل مورد نظر رو انجام می ده

مثلا
For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
Me.Controls(i).Text = "متن شما"
End If
Next


این میاد تمام لیبل ها رو متن شونو به "متن شما" تقییر میده.
حلقه for متغییر i رو از تعداد کل کنترول های صفحه (منحای یک) رو تا 0 می بره
و اگر کنترول شماره i ام از جنس label بود عمل مورده نظر رو رو اون کنترول انجام میده.
خودت می تونی تغییر و گسترشش بدی.

kingdaniyal
یک شنبه 26 آذر 1391, 15:01 عصر
ببینید من 60 تا دکمه دارم که روبروی هر کدوم یه لیبل خالی است
من وقتی روی یک دکمه کلیک میکنم یه متن که از پیش تعیین شده روی لیبل روبرو(تاکید میکنم فقط روبرو بقیه لیبل ها نه)نمایش داده میشه.
هر دکمه یک متن رو نمایش میده.
حالا میخوام این متن ها درحالی که پنهان هستند به صورت رندوم در لیبل ها جا بگیره که مثلا دکمه 1 را میزنیم متن دکمه 5 رو نشون بده و دکمه 5 را که میزنیم متن دکمه 2 رو و همینجوری فهمیدید یا عکس بگیرم؟

tstsst
یک شنبه 26 آذر 1391, 16:02 عصر
این برای پر کردن راندم تمام لیبل ها که فقط باید لیست متن های مورد نظرتو بهشون بدی

Function rand(ByVal lst As String())
Dim j As Integer = 0
Randomize(Date.Now.Second)
For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
While (lst(j) = Nothing)
j = Int(Rnd() * lst.Length) + 1
End While
If lst(j) <> Nothing Then
Me.Controls(i).Text = lst(j)
lst(j) = Nothing
End If
End If
Next
Return Nothing
End Function

برای نمایش هم می تونی تمام لیبل ها رو مقدار visible شونو false کنی و با زدن هر دکمه true کنی شون
اینو تو تمام کلید ها بنویس

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
Dim lb(3), k, t As Integer '4-1 تعداد لیبل ها
k = 0
t = 0
For i = Me.Controls.Count - 1 To 0 Step -1
If TypeOf Me.Controls(i) Is Label Then
lb(k) = i
k += 1
End If
Next
Randomize(Date.Now.Second)
Dim j As Integer = lb(Int(Rnd() * 3) + 1) '4-1 تعداد لیبل ها
For Each l In lb
If (Me.Controls(j).Visible = True) Then
t += 1
End If
Next
If t < 5 Then '4+1 تعداد لیبل ها
If TypeOf Me.Controls(j) Is Label Then
While (Me.Controls(j).Visible = True And lb(j) <> Nothing)
j = lb(Int(Rnd() * 3) + 1) '4-1 تعداد لیبل ها
End While
Me.Controls(j).Visible = True
End If
End If
End Sub

t برای چک کردن اینه که تمام لیبل ها آیا نمایش داده شده یا نه (که در حلقه بینهایت گیر نکنه
lb() شماره لیبل ها

kingdaniyal
یک شنبه 26 آذر 1391, 17:38 عصر
آقا دستت دردنکنه فقط تو کد اولی کجا متنمو بهش بم؟ تو نت پد بدم با فرمت UTF-8 من تازه کارما:قلب:

tstsst
یک شنبه 26 آذر 1391, 18:00 عصر
کد اولی یک فانکشنه تو کلیدی که قرار ریست کنه این کد رو بنویس
و به جای lst اسم آرایه کلماتت باشه
rand(lst)

اگه می خوای از فایل تکست بخونی
اینو قبل کد بالای تو همون کلید بنویس
Dim rd As New StreamReader("path as string")
Dim lst(200) As String '200 تعداد خط های فایل تکستت
Dim i As Integer = 0
While (rd.EndOfStream)
lst(i) = rd.ReadLine
i += 1
End While
rd.Close()

kingdaniyal
یک شنبه 26 آذر 1391, 18:12 عصر
داداش نشد:گریه:
راه دیگه ای هم هست؟:گریه:

kingdaniyal
دوشنبه 27 آذر 1391, 14:11 عصر
آقا توروخدا خیلی مهمه:گریه:

kingdaniyal
سه شنبه 28 آذر 1391, 17:18 عصر
آقا دیگه کسی بلد نبود:|

tstsst
سه شنبه 28 آذر 1391, 19:26 عصر
راه دیگش اینه که مکان لیبل هارو عوض کنی