次の方法で共有


ListBox.ObjectCollection クラス

ListBox 内の項目のコレクションを表します。

この型のすべてのメンバの一覧については、ListBox.ObjectCollection メンバ を参照してください。

System.Object
   System.Windows.Forms.ListBox.ObjectCollection
      System.Windows.Forms.CheckedListBox.ObjectCollection

Public Class ListBox.ObjectCollection
   Implements IList, ICollection, IEnumerable
[C#]
public class ListBox.ObjectCollection : IList, ICollection,
   IEnumerable
[C++]
public __gc class ListBox.ObjectCollection : public IList,
   ICollection, IEnumerable
[JScript]
public class ListBox.ObjectCollection implements IList,
   ICollection, IEnumerable

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

ListBox.ObjectCollection クラスは、 ListBox に表示される項目を格納します。 ListBox クラス内では、ほかにも 2 つのコレクションが定義されており、これらを使用して、このコレクション内でどの項目が選択されているかを判断できます。 ListBox.SelectedObjectCollection クラスは、 ListBox.ObjectCollection 内で選択されている項目を判断するプロパティとメソッドを提供します。また、 ListBox.SelectedIndexCollection クラスを使用すると、 ListBox.ObjectCollection 内で選択されている項目のインデックスを確認できます。

項目をコレクションに追加するには、いくつか方法があります。 Add メソッドを使用すると、単一のオブジェクトをコレクションに追加できます。複数のオブジェクトをコレクションに追加するには、項目の配列を作成し、その配列を AddRange メソッドに割り当てます。コレクション内の特定の位置にオブジェクトを挿入するには、 Insert メソッドを使用します。項目を削除するには、 Remove メソッドか、コレクション内の項目の位置が判明している場合は RemoveAt メソッドを使用できます。 Clear メソッドを使用すると、 Remove メソッドを使用して一度に 1 つずつ項目を削除する代わりに、コレクションからすべての項目を削除できます。

DataSource プロパティを使用しても、 ListBox の項目を操作できます。 DataSource プロパティを使用して項目を ListBox に追加した場合は、それらの項目を Items プロパティを使用して ListBox に表示できますが、 ListBox.ObjectCollection のメソッドを使用して、リストに対して項目の追加や削除を行うことはできません。

項目を追加および削除するメソッドやプロパティのほかに、 ListBox.ObjectCollection は、コレクション内で項目を検索するメソッドも提供します。 Contains メソッドを使用すると、オブジェクトがコレクションのメンバかどうかを判断できます。コレクション内に項目があることが判明している場合は、 IndexOf メソッドを使用して、その項目がコレクションのどこに位置しているかを確認できます。

使用例

[Visual Basic, C#] DrawMode プロパティを OwnerDrawVariable 値に設定し、 DrawItem イベントおよび MeasureItem イベントを処理して、オーナー描画の ListBox を作成するコード例を次に示します。また、この例では、 BorderStyle プロパティおよび ScrollAlwaysVisible プロパティを設定し、 System.Windows.Forms.ObjectCollection.AddRange メソッドを使用しています。この例を実行するには、次のコードを空のフォームに貼り付けます。このフォームは、System.Drawing 名前空間および System.Windows.Forms 名前空間をインポートします。このフォームのコンストラクタまたは Load メソッドから InitializeOwnerDrawnListBox を呼び出します。

 
Friend WithEvents ListBox1 As System.Windows.Forms.ListBox

Private Sub InitializeOwnerDrawnListBox()
    Me.ListBox1 = New System.Windows.Forms.ListBox

    ' Set the location and size.
    ListBox1.Location = New Point(20, 20)
    ListBox1.Size = New Size(240, 240)

    ' Populate the ListBox.ObjectCollection property 
    ' with several strings, using the AddRange method.
    Me.ListBox1.Items.AddRange(New Object() _
        {"System.Windows.Forms", "System.Drawing", "System.Xml", _
        "System.Net", "System.Runtime.Remoting", "System.Web"})

    ' Turn off the scrollbar.
    ListBox1.ScrollAlwaysVisible = False

    ' Set the border style to a single, flat border.
    ListBox1.BorderStyle = BorderStyle.FixedSingle

    ' Set the DrawMode property to the OwnerDrawVariable value. 
    ' This means the MeasureItem and DrawItem events must be 
    ' handled.
    ListBox1.DrawMode = DrawMode.OwnerDrawVariable
    Me.Controls.Add(Me.ListBox1)
End Sub


' Handle the DrawItem event for an owner-drawn ListBox.
Private Sub ListBox1_DrawItem(ByVal sender As Object, _
    ByVal e As DrawItemEventArgs) Handles ListBox1.DrawItem

    ' If the item is the selected item, then draw the rectangle filled in
    ' blue. The item is selected when a bitwise And of the State property
    ' and the DrawItemState.Selected property is true. 
    If (e.State And DrawItemState.Selected = DrawItemState.Selected) Then
        e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds)
    Else
        ' Otherwise, draw the rectangle filled in beige.
        e.Graphics.FillRectangle(Brushes.Beige, e.Bounds)
    End If

    ' Draw a rectangle in blue around each item.
    e.Graphics.DrawRectangle(Pens.Blue, e.Bounds)

    ' Draw the text in the item.
    e.Graphics.DrawString(Me.ListBox1.Items(e.Index), Me.Font, _
        Brushes.Black, e.Bounds.X, e.Bounds.Y)

    ' Draw the focus rectangle around the selected item.
    e.DrawFocusRectangle()
End Sub

' Handle the MeasureItem event for an owner-drawn ListBox.
Private Sub ListBox1_MeasureItem(ByVal sender As Object, _
    ByVal e As MeasureItemEventArgs) Handles ListBox1.MeasureItem

    ' Cast the sender object back to ListBox type.
    Dim theListBox As ListBox = CType(sender, ListBox)

    ' Get the string contained in each item.
    Dim itemString As String = CType(theListBox.Items(e.Index), String)

    ' Split the string at the " . "  character.
    Dim resultStrings() As String = itemString.Split(".")

    ' If the string contains more than one period, increase the 
    ' height by ten pixels; otherwise, increase the height by 
    ' five pixels.
    If (resultStrings.Length > 2) Then
        e.ItemHeight += 10
    Else
        e.ItemHeight += 5
    End If

End Sub


[C#] 
internal System.Windows.Forms.ListBox ListBox1;

private void InitializeOwnerDrawnListBox()
{
    this.ListBox1 = new System.Windows.Forms.ListBox();

    // Set the location and size.
    ListBox1.Location = new Point(20, 20);
    ListBox1.Size = new Size(240, 240);

    // Populate the ListBox.ObjectCollection property 
    // with several strings, using the AddRange method.
    this.ListBox1.Items.AddRange(new object[]{"System.Windows.Forms", 
        "System.Drawing", "System.Xml", "System.Net", "System.Runtime.Remoting", 
        "System.Web"});

    // Turn off the scrollbar.
    ListBox1.ScrollAlwaysVisible = false;

    // Set the border style to a single, flat border.
    ListBox1.BorderStyle = BorderStyle.FixedSingle;

    // Set the DrawMode property to the OwnerDrawVariable value. 
    // This means the MeasureItem and DrawItem events must be 
    // handled.
    ListBox1.DrawMode = DrawMode.OwnerDrawVariable;
    ListBox1.MeasureItem += 
        new MeasureItemEventHandler(ListBox1_MeasureItem);
    ListBox1.DrawItem += new DrawItemEventHandler(ListBox1_DrawItem);
    this.Controls.Add(this.ListBox1);
    
}


// Handle the DrawItem event for an owner-drawn ListBox.
private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
{

    // If the item is the selected item, then draw the rectangle
    // filled in blue. The item is selected when a bitwise And  
    // of the State property and the DrawItemState.Selected 
    // property is true.
    if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
    {
        e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds);
    }
    else
    {
        // Otherwise, draw the rectangle filled in beige.
        e.Graphics.FillRectangle(Brushes.Beige, e.Bounds);
    }

    // Draw a rectangle in blue around each item.
    e.Graphics.DrawRectangle(Pens.Blue, e.Bounds);

    // Draw the text in the item.
    e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(),
        this.Font, Brushes.Black, e.Bounds.X, e.Bounds.Y);

    // Draw the focus rectangle around the selected item.
    e.DrawFocusRectangle();
}

// Handle the MeasureItem event for an owner-drawn ListBox.
private void ListBox1_MeasureItem(object sender, 
    MeasureItemEventArgs e)
{

    // Cast the sender object back to ListBox type.
    ListBox theListBox = (ListBox) sender;

    // Get the string contained in each item.
    string itemString = (string) theListBox.Items[e.Index];

    // Split the string at the " . "  character.
    string[] resultStrings = itemString.Split('.');

    // If the string contains more than one period, increase the 
    // height by ten pixels; otherwise, increase the height by 
    // five pixels.
    if (resultStrings.Length>2)
    {
        e.ItemHeight += 10;
    }
    else
    {
        e.ItemHeight += 5;
    }

}

[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Windows.Forms

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)

参照

ListBox.ObjectCollection メンバ | System.Windows.Forms 名前空間 | ListBox.SelectedObjectCollection | ListBox.SelectedIndexCollection