リストコントロールの各アイテム(チェックボックスリストなど)に表示されるテキストの値を設定する方法を理解しようとしていますが、ほとんどのリストコントロールは、チェックリストボックスコントロールだけではありません。Windowsフォームでリストアイテムのテキストを設定する方法
私はchecklistboxコントロールを持って、私は通常のタスク名のリストを移入したい
Friend WithEvents clstTasks As System.Windows.Forms.CheckedListBox
。 addメソッドを呼び出してTaskオブジェクトをリストに追加します。 ToStringメソッドをオーバーライドすると、その関数によって返される値はすべて、リスト項目のテキストとして表示されることがわかります。
しかし、まれに、名前以外の何かを表示したいと思います。たとえば、別のプロパティの名前と値(名前の後にかっこ内に表示されるBooleanプロパティ "Optional"の値など)を表示したいとします。
これを行うにはどのような方法が最適ですか?
私が考えることのできる最高のものは、GUIレイヤーで設定されたプロパティーを定義し、次にToString関数によって使用され、呼び出されたときの動作を判別することです。制御プロパティが1つの値に設定されている場合、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
これは私が期待していたものですが、本当に好きではありませんでした。 ListItemのTextプロパティを設定できるListItemPreRenderなどのイベントを期待していました。クラスのToString関数に頼るのではなく、リストコントロールからテキストプロパティを制御する方が適切なように思えました。 ToString関数の動作方法を列挙するプロパティを追加します。 公開プロパティToStringBehaviour ToStringBehaviourEnumとして 公共列挙ToStringBehaviourEnum整数 DisplayNameOnly DisplayNameAndOptional は「これはWinフォームの例ではなく、Webフォームであることを将来のバリエーション エンド列挙 – ChadD