2012-04-24 2 views
1

Так что я пытаюсь написать MasterMind игру, но у меня есть проблемаКак вызвать объект на основе переменной в Visual Studio?

У меня есть 40 PictureBoxes набор в 10 различных строк, и я хочу, чтобы иметь один код обрабатывать все 10 строк, а не копировать и вставлять кода и изменения имен изображений. Я пытался использовать переменную для достижения этого, но если это возможно, то я не знаю, как правильно это сделать.
Это то, что я прямо сейчас:

Dim X As Integer 
Dim Y As Integer 
Private Sub ButtonCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCheck.Click 
    If HighlightRow1 = True Then 
     X = 1 
     Y = 2 
     Check1() 
    ElseIf HighlightRow2 = True Then 
     X = 4 
     Y = 5 
     Check1() 
    ... 
    EndIf 
    End Sub 
    Private Sub Check1() 
     If PictureBox(X).Tag = "Red" //'Getting this error: Class 'System.Windows.Forms.PictureBox' cannot be indexed because it has no default property. 

     blah blah blah 
     ElseIf PictureBox(X).Tag = "Green" Then 
     blah blah blah 
     ... 
     EndIf 

     If Picturebox(Y).Tag = "Red" Then 
     blah blah blah 
     ... 
     End If 

Есть ли способ сделать это? Я новичок в программировании, поэтому мне очень жаль, если это очень простой вопрос.

+1

Для чего это стоит 'Если HighlightRow1 = true' является избыточным и функционально эквивалентны более емким' Если HighlightRow1' – JohnFx

+0

вы используете * класс * имя где требуется ссылка * object *. Лучше всего изучить объектно-ориентированное программирование из книги или школы, проб и ошибок будет много ошибок, если у вас возникнут проблемы с основами. Использование 40 контролей вместо 1 - это еще один такой вид проб. –

+0

Что вы хотите достичь с помощью этого массивного массива PictureBox? –

ответ

1

Чтобы проверить все изображения, поместите все ваши изображения в массив и используйте для каждого цикла, чтобы проверить их.

Private Sub Check1() 
    Dim picBoxArr() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, PictureBox4} 
    For Each picBox in picBoxArr 
     If picBox.Tag = "Red" Then 
      'yada yada 
     End If 
    Next 
End Sub 

Чтобы проверить конкретный кадр изображения, опустите для каждого цикла и укажите изображение, которое вы хотите проверить, с помощью индекса. Примечание: индексы начинаются с нуля, поэтому в этом случае в окне изображения 1 будет индекс нуля.

Private Sub Check1() 
    Dim picBoxArr() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, PictureBox4} 
    If picBoxArr(0).Tag = "Red" Then 
      'yada yada 
    End If 
End Sub 

Вы можете прочитать больше о массивах здесь http://msdn.microsoft.com/en-us/library/wak0wfyt.aspx

+0

Большое спасибо! Это именно то, что я искал: D –

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