2017-01-20 2 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 как Control In controls'. Затем проверьте, если 'TypeOf ctrl Is Button'. Тогда вам просто нужно сделать свой код. – nbadaud

+0

@nbadaud Это приятное предложение, но вы должны расшириться дальше, так как этот код запускается кнопкой, которая не должна изменяться. –

+0

извините, как я уже говорил, прежде чем я новичок в vb.net, поэтому то, что вы пытаетесь сказать мне, не так понятно.! в любом случае спасибо за ответ. – Kamal

ответ

0

Прежде всего, включить опцию Strict! Это сделано, попробуйте следующее:

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 

Это заменяет ОБОИХ 2-й и 3-й фрагменты кода в вопросе. Нам может быть еще интереснее включить первый сниппет следующим образом:

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 Когда событие click Button Button запущено, этот цикл кода проходит через каждый элемент управления вашей формы. Если текущий элемент управления является кнопкой, а его имя не является «Button10», я проверяю, что текущий текст кнопки - 9. Если это условие истинно, я устанавливаю текст текущей кнопки в «». – nbadaud

+0

хорошо, спасибо за объяснение :) – Kamal

Смежные вопросы