我想弄清楚如何设置显示列表控件的每个项目(如复选框列表)的文本的值,但实际上这适用于大多数列表控件,而不仅仅是checklistbox控件。如何在Windows窗体中设置列表项的文本
我有一个checklistbox控制,
Friend WithEvents clstTasks As System.Windows.Forms.CheckedListBox
,我通常要与任务名称的列表来填充。我调用add方法将Task对象添加到列表中。我知道如果我重写ToString方法,该函数返回的任何值都将显示为列表项的文本。
但是,在极少数情况下,我想显示除名称之外的其他内容。例如,也许我想显示另一个属性的名称和值,例如名称后面的括号中显示的布尔属性“可选”的值。
这样做的最好方法是什么?
我能想到的最好的方法是定义一个属性,该属性在GUI层中设置,然后由ToString函数用于确定它在调用时应该如何表现。如果控制属性设置为一个值,则ToString将返回Name,否则它将返回Name,后跟可选标志的值。这似乎与我有点分离。
另一个看起来有点矫枉过正的方法是定义一个继承自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
这就是我的预期,但并不真正喜欢。我希望ListItemPreRender这样的事件可以在ListItem上设置Text属性。对于文本属性来说,从列表控件中控制而不是依赖类的ToString函数似乎更合适。 我想我会添加一个属性,枚举ToString函数应该如何表现。 公共财产ToStringBehaviour作为ToStringBehaviourEnum 公共枚举ToStringBehaviourEnum作为整数 DisplayNameOnly DisplayNameAndOptional “允许将来的变化 结束枚举 – ChadD 2009-05-28 10:42:33