【发布时间】:2009-05-28 03:16:50
【问题描述】:
我试图弄清楚如何设置为列表控件(例如复选框列表)的每个项目显示的文本的值,但实际上这适用于大多数列表控件,而不仅仅是复选框控件。
我有一个复选框控件,
Friend WithEvents clstTasks As System.Windows.Forms.CheckedListBox
我通常想用任务名称列表填充。我调用 add 方法将 Task 对象添加到列表中。我知道如果我重写 ToString 方法,该函数返回的任何值都将显示为列表项的文本。
但是,在极少数情况下,我希望显示除名称之外的其他内容。例如,也许我想显示另一个属性的名称和值,例如名称后面括号中显示的布尔属性“可选”的值。
最好的方法是什么?
我能想到的最好的方法是定义一个在 GUI 层中设置的属性,然后由 ToString 函数用于确定它在调用时的行为方式。如果控制属性设置为一个值,则 ToString 将返回 Name,否则它将返回 Name 后跟 Optional 标志的值。这对我来说似乎有点脱节。
另一个看起来有点过头的替代方法是定义一个继承自 Task 的新类,例如 TaskOptional,它覆盖了基类上的 Tostring 方法。在这个子类中,ToString 函数将返回 Name/Optional 标志值。然而,这似乎也有点疯狂,必须提出一个新类来修改文本在表示层中的显示方式。我觉得我应该能够在表示层中控制这一点,而无需更改业务对象或创建新的派生对象。
最好的方法是什么?
For Each CurrentTask As Task In _MasterTaskList
clstTasks.Items.Add(CurrentTask, True)
Next
Public Class Task
Private _Name As String
Private _Optional As Boolean
Public Sub New (name As String, optional As Boolean)
_Name = name
End Sub
Public Overrides Function ToString() As String
Return _Name
End If
End Function
End Class
【问题讨论】: