2017-01-20 16 views
0

我有這樣的代碼爲puzzle8項目:什麼是使我的puzzel 8項目更好的最佳途徑?

Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click 
     Dim indexrand As Integer 
     Dim pos As Integer 
     Dim m As Integer 
     Dim j As Integer 
     For j = 0 To 100 
      pos = 0 
      indexrand = R.Next(0, 9) 
      For i = indexrand To 8 
       array.Insert(0, array(i + pos)) 
       pos += 1 
      Next 
      m = 9 - indexrand 
      Do While m > 0 
       array.RemoveAt(array.Count - 1) 
       m -= 1 
      Loop 
     Next 

我做了一個循環,隨機播放他們它完美地工作。然後,我希望它給每一個按鈕的值,所以我這樣做:

Button1.Text = array(0) 
Button2.Text = array(1) 
Button3.Text = array(2) 
Button4.Text = array(3) 
Button5.Text = array(4) 
Button6.Text = array(5) 
Button7.Text = array(6) 
Button8.Text = array(7) 
Button9.Text = array(8)` 

不過,我在這裏有一個問題,因爲值9,不會變成「」,所以我這樣做:

If Button1.Text = 9 Then 
    Button1.Text = "" 

ElseIf Button2.Text = 9 Then 
    Button2.Text = "" 

ElseIf Button3.Text = 9 Then 
    Button3.Text = "" 

ElseIf Button4.Text = 9 Then 
    Button4.Text = "" 

ElseIf Button5.Text = 9 Then 
    Button5.Text = "" 

ElseIf Button6.Text = 9 Then 
    Button6.Text = "" 

ElseIf Button7.Text = 9 Then 
    Button7.Text = "" 

ElseIf Button8.Text = 9 Then 
    Button8.Text = "" 

ElseIf Button9.Text = 9 Then 
    Button9.Text = "" 
End If ` 

這是行不通的。但是,我的問題是這是很多If聲明。有什麼辦法可以循環使用,而不用輸入所有這些ifs?

+0

您可以循環遍歷窗體上的所有按鈕與'爲每個Ctrl作爲控制在控件'。然後檢查'TypeOf ctrl是否是按鈕'。那麼你只需要做你的代碼。 – nbadaud

+0

@nbadaud這是一個很好的建議,但你應該進一步擴展,因爲這個代碼是由一個不應該改變的按鈕觸發的。 –

+0

對不起,因爲我之前說我是vb.net的新手,所以你想告訴我的不是那麼清楚。無論如何感謝您的答案。 – Kamal

回答

0

首先,打開選項嚴格!做到這一點,試試這個:

Dim Buttons() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9} 
For i As Integer = 0 To array.Length - 1 
    Buttons(i).Text = If(array(i) = 9," ",array(i).ToString()) 
Next 

這個問題代替了第二和第三個代碼片段。我們可以有更多的樂趣,包括這樣的第一個片段:

Public Function Shuffle(Of T)(ByVal items As IList(Of T)) As IList(Of T) 
    Static rand As New Random() 
    For i As Integer = items.Count - 1 To 1 Step -1 
     Dim j As Integer = rand.Next(i + 1) 
     Dim temp As T= items(i) 
     items(i) = items(j) 
     items(j) = temp 
    Next 
    Return items 
End Function 

Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click 
    Dim Buttons() As Button = {Button1, Button2, Button3, Button4, Button5, Button6, Button7, Button8, Button9} 
    Dim values = Shuffle(Enumerable.Range(0, 9).ToList()) 
    For i As Integer = 0 To values.Length - 1 
     Buttons(i).Text = If(values(i) = 9," ",values(i).ToString()) 
    Next 
End Sub 
+0

+5000使用Option Strict! –

+0

以及初學者vb您給我的第一個樣品,我真誠地理解它,這是一個更好的方式來使用發現9,但你給的另一個樣品,說實話,我不知道你有什麼完成了..!無論如何感謝您的建議 – Kamal

0

此代碼將工作:

Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click 
    For Each ctrl As Control In Controls 
     ' Check if the control is a button and not the Button10 
     If TypeOf ctrl Is Button And ctrl.Name <> "Button10" Then 
      ' Check if the current button's text is 9     
      If ctrl.Text = "9" Then 
       ctrl.Text = "" 
      End If 
     End If 
    Next 
End Sub 

順便說一句,我不知道該條件If ctrl.Text = "9"是做到這一點的最好辦法。

+0

進行比較,它實際上工作,但是,請你解釋你在這裏做了什麼?因爲我仍然不確定它爲什麼起作用 – Kamal

+0

@Kamal當Button10的click事件被觸發時,這段代碼循環遍歷表單的每個控件。如果當前控件是一個按鈕,並且它的名稱不是「Button10」,則驗證當前按鈕文本是9.如果此條件爲真,則將當前按鈕的文本設置爲「」。 – nbadaud

+0

好吧,謝謝你的解釋:) – Kamal