【问题标题】:How can I control the colour of multiple buttons in a form depending on a value?如何根据值控制表单中多个按钮的颜色?
【发布时间】:2021-07-13 12:40:00
【问题描述】:

我正在为一家有 31 间客房的酒店创建酒店预订系统,所以我有 31 个按钮,分别称为“Button1”、“Button2”等。

我需要根据房间的可用性更改按钮的背面颜色(红色/绿色)。

每个房间在数据库中都有一个“IsVacant”变量,该变量为真或假,该值将作为数组导入表单。我只需要一种方法来根据导入数组的相应值链接所有按钮的颜色。

Screenshot of Form

【问题讨论】:

  • 你好@Oliwier,这是什么语言? HTML ? 那么你应该使用 Javascript 来实现它。您使用 HTML-DOM 的哪个元素来显示您的数据,它看起来如何像您的代码?请为您的问题提供足够的详细信息...
  • 您可以使用循环创建基于可用房间的按钮。您可以向这些按钮添加处理程序以执行预订、取消等操作。至于颜色,您可以在收集这些按钮时更改颜色或使用 Tag 属性对其进行处理。如果您需要了解更多详情,请告诉我。

标签: vb.net forms button


【解决方案1】:
  1. 为每个按钮循环
  2. 从数据库中查询IsVacant
  3. 根据查询结果改变按钮的背景颜色

【讨论】:

    【解决方案2】:

    创建一个类来保存你的房间数据。

    Public Class Room
        Public Property RoomNubmer As Integer
        Public Property IsVacant As Boolean
        Public Property Details As String
        Public Sub New(RN As Integer, Vac As Boolean, Det As String)
            RoomNubmer = RN
            IsVacant = Vac
            Details = Det
        End Sub
    
        Public Overrides Function ToString() As String
            Return RoomNubmer.ToString
        End Function
    End Class
    

    在表单中创建一个表单级别变量List(Of T),以便从表单中的任何位置都可以看到房间数据。

    为了填写列表,我们首先连接到数据库并检索数据。接下来,循环遍历DataTable 行,创建一个新房间并将该房间添加到列表中。

    Private ConStr As String = "Your connection string"
    
    Private RoomList As New List(Of Room)
    
    Private Function GetRoomData() As DataTable
        Dim dt As New DataTable
        Using cn As New SqlConnection(ConStr),
                cmd As New SqlCommand("Select * From Rooms", cn)
            cn.Open()
            Using reader = cmd.ExecuteReader
                dt.Load(reader)
            End Using
        End Using
        Return dt
    End Function
    
    Private Sub FillRoomList()
        Dim dt = GetRoomData()
        For Each row As DataRow In dt.Rows
            RoomList.Add(New Room(CInt(row(0)), CBool(row(1)), row(2).ToString))
        Next
    End Sub
    

    Form.Load 中,我们填写房间列表。然后制作一个按钮列表。假设两个列表的长度相同:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FillRoomList()
        Dim ButtonList As New List(Of Button) From {Button1, Button2, Button3, Button4} 'etc
        For i = 0 To ButtonList.Count - 1
            ButtonList(i).Text = RoomList(i).ToString
            If RoomList(i).IsVacant Then
                ButtonList(i).BackColor = Color.Green
            Else
                ButtonList(i).BackColor = Color.Red
            End If
        Next
    
    End Sub
    

    如您所见,List(Of T) 就像一个裤子口袋,方便存放东西。在 List<T> Class 中了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2022-08-02
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多