【问题标题】:Associate a button with a specific object from an array of objects将按钮与对象数组中的特定对象相关联
【发布时间】:2018-11-09 02:08:23
【问题描述】:

使用 C# 和 Visual Studio 2017。

基本上,我正在设计一个允许用户预订座位的程序。我可以通过强制(或多或少)使其工作,但必须有更好的方法。

每个按钮代表一个座位,点击后 - 如果座位尚未预订 - 用户将填写他们的信息并能够预订座位。如果座位已被预订,它将显示之前预订座位的人的详细信息(名字、姓氏等) - 我目前已将其存储在数组中。

有没有办法将每个按钮与数组中的一个对象关联起来?预订座位很容易,但单击预订座位以显示详细信息(或删除预订并释放座位)是我认为我可以比目前拥有的更高效的部分。

即。如果单击座位 A1 并输入详细信息,则该座位将被保留。后来,其他座位被保留。如果我想返回查看 A1 或删除预订,如何将按钮 A1 与我存储在数组中的数据相关联。

【问题讨论】:

  • 不要使用数组。构建一个引用所有所需详细信息的专用类,创建一个LIst<SpecializedClass> 并为您创建的每个Button 添加一个new SpecializedClass() 以及相关详细信息。然后,您可以通过任何方式过滤/搜索LIst<SpecializedClass>:按按钮(使用其名称、标签值、TabIndex 等)、人名、座位号...任何由类属性引用的内容。跨度>
  • 问题主题和您的个人资料暗示这是一项课堂作业。因此,您可能对允许使用的数据结构有限制。您已经表明您正在使用一个对象数组。如果您只能使用数组,则应在问题中说明这一点,以免我们浪费时间提出不相关的建议。
  • 您可以使用按钮的Tag 属性。但我不会在数组中存储任何东西。为什么不将seat ID 存储在按钮的标签中,并在单击时使用标签中的Seat ID 从数据库中获取您需要的信息?
  • @TnTinMn 这是一项任务,但我们对允许使用的内容没有任何限制,如果有任何此类限制(如您所说),我会提到它们。重点是 UI 设计,但显然我希望代码从“良好设计”的角度尽可能地实用。
  • @Jimi 您能否详细说明我将如何实现这一点?所有按钮都有一个Tag value,并且我创建了一个包含座位详细信息的类(我最初将这些存储在数组中,但列表听起来要好得多)。这个问题可能看起来很傻,但我什么时候创建new SpecializedClass()?我会在程序开始时为每个按钮/座位初始化一个吗?

标签: c# winforms class object button


【解决方案1】:

只是为了提供一个我使用过的解决方案,感谢上面的评论 (Jimi) 对List 的建议。

以下示例显示了用于显示预留座位详细信息的代码。然后将strings“firstName”、“lastName”等放入另一个文本框进行显示。所有席位都组织成一个List,其中填充了类对象类型“席位”,它们具有您可以在代码中看到的所有属性。

当一个按钮被点击时,它会填充txtSeatSelected 文本框,然后用于根据座位ID 字符串匹配相应的座位。

foreach (var seat in seatsList)
        {
            if (seat.seatID == txtSeatSelected.Text)
            {
                firstName = seat.firstName;
                lastName = seat.lastName;
                address = seat.address;
                city = seat.city;
                province = seat.province;
                postalCode = seat.postalCode;
            }
        }

在整个程序中使用此代码的类似迭代来根据情况在整个程序中查找我要修改的对象。

感谢离开cmets的人的帮助。

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多