2009-05-28 12 views
1

リストコントロールの各アイテム(チェックボックスリストなど)に表示されるテキストの値を設定する方法を理解しようとしていますが、ほとんどのリストコントロールは、チェックリストボックスコントロールだけではありません。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 

答えて

1

は、次の

Public Overrides Function ToString() As String 
    Return string.Format("{0}{1}", _Name, IIF(_Optional, " (Optional)", "")) 
End Function

EDITを行うことができます:あなたは、あなたが提供したコードに欠けているコンストラクタに_optionalの値を設定する必要があります。

+0

これは私が期待していたものですが、本当に好きではありませんでした。 ListItemのTextプロパティを設定できるListItemPreRenderなどのイベントを期待していました。クラスのToString関数に頼るのではなく、リストコントロールからテキストプロパティを制御する方が適切なように思えました。 ToString関数の動作方法を列挙するプロパティを追加します。 公開プロパティToStringBehaviour ToStringBehaviourEnumとして 公共列挙ToStringBehaviourEnum整数 DisplayNameOnly DisplayNameAndOptional は「これはWinフォームの例ではなく、Webフォームであることを将来のバリエーション エンド列挙 – ChadD

2

CheckedListBoxのDisplayMemberプロパティをカスタムクラスのプロパティの名前に設定できます。

あなたは次のようにプロパティを作成しましょう:

Public ReadOnly Property NameOptional() As String 
    Return _Name & " (" & _Optional & ")" 
End Property 

、あなたは、このような表示部材を設定することができます。

clstTasks.DisplayMember = "NameOptional" 

あなたが表示部材を設定すると、このプロパティが表示されます。 ToString値の代わりに使用します。

+0

注意を許可したよう。 CheckListコントロールにはDisplayMemberプロパティはありません。私はあなたがWebコントロールを考えていたと信じています。 – ChadD

+0

MSDNはそうでないと言います... http://msdn.microsoft.com/en-us/library/yx9dzztb.aspx ブラウズ可能な属性がfalseに設定されていることがわかります。見えない可能性がありますプロパティのリストでは、まだコードで設定することができます。 –

関連する問題