2014-01-29 2 views
0

Мой партнер и я пытаемся выяснить, как отключить кнопку по одному. Мы создаем программу в Visual Studio Express 2012, которая отключит кнопку, когда она будет введена в текстовое поле. Например, у нас есть пять букв, размещенных отдельно на пяти разных кнопках. Если мы должны положить букву «D» в текстовое поле, кнопка, содержащая эту конкретную букву, будет отключена. Мы используем кодОтключение кнопок по одному

If e.KeyCode = Keys.D Then 
     Button1.Enabled = False 
    End If 

Теперь, что работает, но если два или более кнопки, имеют те же буквы, все из них отключают, потому что тогда код будет:

If e.KeyCode = Keys.D Then 
     Button1.Enabled = False 
    End If 

    If e.KeyCode = Keys.D Then 
     Button2.Enabled = False 
    End If 

Моих проблема заключалась бы в том, каким образом я мог бы различать те кнопки, которые имеют одну и ту же букву друг от друга, так что, когда я набираю букву в текстовом поле, отключается только одна кнопка, и когда я ее снова вводим, отключается другая кнопка, содержащая ту же букву. Благодаря!

+0

Итак, если у вас есть две кнопки, как с текстом «D», вы хотите, когда вы вводите текст в текстовое поле, кнопки для отключения последовательно больше, чем вы набираете букву? Поэтому, если вы наберете «D», первый отключится, то, если вы наберете другое «D», сделав текстовое поле «DD», второй отключится? – Brandon

ответ

1

Предполагая, что все кнопки не в дочерних панелях:

If e.KeyCode = Keys.D Then 
    For Each b As Button In Me.Controls.OfType(Of Button)() 
    If b.Text.Contains("D") AndAlso b.Enabled Then 
     b.Enabled = False 
     Exit For 
    End If 
    Next 
End If 
0

Это будет рекурсивно перебирать все элементы управления на форме ищет кнопки и отключить их на основе символов и количестве символов, введенной в текстовое поле:

Private Sub textBox1_TextChanged(sender As Object, e As System.EventArgs) 
    Dim text As String = TryCast(sender, TextBox).Text.ToLower() 

    For Each b As Button In GetAllButtons(Me) 
     b.Enabled = True 
    Next 

    For Each c As Char In text 
     Dim count As Integer = text.Count(Function(cc) cc = c) 
     For i As Integer = 0 To count - 1 

      For Each b As Button In GetAllButtons(Me).Where(Function(x) x.Text.ToLower().Contains(c.ToString())).Take(count).ToList() 
       b.Enabled = False 
      Next 
     Next 
    Next 

End Sub 

Private Function GetAllButtons(control As Control) As List(Of Button) 
    Dim allButtons As New List(Of Button)() 

    If control.HasChildren Then 
     For Each c As Control In control.Controls 
      allButtons.AddRange(GetAllButtons(c)) 
     Next 
    ElseIf TypeOf control Is Button Then 
     allButtons.Add(TryCast(control, Button)) 
    End If 

    Return allButtons 
End Function 
Смежные вопросы