Я пытаюсь выяснить, как установить значение текста, отображаемого для каждого элемента элемента управления списком, такого как список флажков, но на самом деле это относится к большинству элементов управления списком, а не только к элементу управления флажком.
У меня есть элемент управления checklist,
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