Как я могу написать цикл, чтобы заменить это, если заявление для разных кнопок - PullRequest
0 голосов
/ 31 октября 2018

У меня есть доступ к данным с именем A. Он имеет 90 строк, и каждая строка имеет 2 столбца следующим образом:

primary key as autonumber and yes/no field

У меня есть форма vb, которая имеет 90 зеленых кнопок и код:

Private Sub _1st_Floor_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim myConnection As New OleDbConnection(myConnString)
    Dim myCommand As New OleDbCommand("SELECT ID FROM A WHERE Busy=True", myConnection)
    myConnection.Open()
    Dim reader As OleDbDataReader
    Dim dt As New DataTable
    dt.Load(myCommand.ExecuteReader)
    If dt.Rows(0).Item(0).ToString = 1 Then
        Button1.BackColor = Color.Red
        Button1.FlatAppearance.BorderColor = Color.Red
    End If
    If dt.Rows(1).Item(0).ToString = 2 Then
        Button2.BackColor = Color.Red
        Button2.FlatAppearance.BorderColor = Color.Red
    End If
End Sub

Это отлично работает, но я не хочу повторять один и тот же блок If снова и снова для 90 кнопок. Как я могу написать цикл с одним набором кода для всех 90 кнопок?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Использование ваших собственных "слов" :) возможно, не самый эффективный способ, но я просто хотел написать это, максимально используя ваш код ...

Private Sub _1st_Floor_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim myConnection As New OleDbConnection(myConnString)
    Dim myCommand As New OleDbCommand("SELECT ID FROM A WHERE Busy=True", myConnection)
    myConnection.Open()
    Dim reader As OleDbDataReader
    Dim dt As New DataTable
    dt.Load(myCommand.ExecuteReader)

    For index As Integer = 1 To 90
        If dt.Rows(index - 1).Item(0).ToString = index.ToString Then
            Dim button As Button = CType(Me.Controls("Button" + index.ToString), Button)
            button.BackColor = Color.Red
            button.FlatAppearance.BorderColor = Color.Red
        End If
    Next

End Sub

Я использовал эту запись , чтобы получить элементы управления по имени String

0 голосов
/ 31 октября 2018

Просмотрите ваши записи и найдите соответствующие кнопки:

For Each row As DataRow In dt.Rows
  Dim buttonName as String = "button" & row(0).ToString()
  Dim cntrls() As Control = Me.Controls.Find(buttonName, True)
  If cntrls IsNot Nothing Then
    Dim btn As Button = TryCast(cntrls(0), Button)
    If btn IsNot Nothing Then
      btn.BackColor = Color.Red
      btn.FlatAppearance.BorderColor = Color.Red
    End If
  End If
Next

Это зависит от согласованности схемы именования кнопок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...