ListBox.Sort ListBox.Sort ListBox.Sort ListBox.Sort Method

定義

ListBox 内の項目を並べ替えます。Sorts the items in the ListBox.

protected:
 virtual void Sort();
protected virtual void Sort ();
abstract member Sort : unit -> unit
override this.Sort : unit -> unit
Protected Overridable Sub Sort ()

次のコード例は、メソッドSortの使用方法を示しています。The following code example demonstrates using the Sort method. この例では、 ListBoxクラスから継承し、派生クラスのSortメソッドをオーバーライドしてユーザー定義の並べ替えを実行する方法を示します。The example demonstrates inheriting from the ListBox class and overriding the Sort method in the derived class to perform a user-defined sort. この例を実行するには、空のフォームに次のコードを貼り付けます。To run this example paste the following code in an empty form.

// The following code example demonstrates using the ListBox.Sort method
// by inheriting from the ListBox class and overriding the Sort method.
using namespace System::Drawing;
using namespace System::Windows::Forms;

// This class inherits from ListBox and implements a different 
// sorting method. Sort will be called by setting the class's Sorted
// property to True.
public ref class SortByLengthListBox: public ListBox
{
public:
   SortByLengthListBox()
      : ListBox()
   {}

protected:

   // Overrides the parent class Sort to perform a simple
   // bubble sort on the length of the string contained in each item.
   virtual void Sort() override
   {
      if ( Items->Count > 1 )
      {
         bool swapped;
         do
         {
            int counter = Items->Count - 1;
            swapped = false;
            while ( counter > 0 )
            {
               
               // Compare the items' length. 
               if ( Items[ counter ]->ToString()->Length < Items[ counter - 1 ]->ToString()->Length )
               {
                  
                  // Swap the items.
                  Object^ temp = Items[ counter ];
                  Items[ counter ] = Items[ counter - 1 ];
                  Items[ counter - 1 ] = temp;
                  swapped = true;
               }
               
               // Decrement the counter.
               counter -= 1;
            }
         }
         while ( (swapped == true) );
      }
   }
};

public ref class Form1: public System::Windows::Forms::Form
{
internal:
   System::Windows::Forms::Button^ Button1;
   SortByLengthListBox^ sortingBox;

public:
   Form1()
      : Form()
   {
      this->Button1 = gcnew System::Windows::Forms::Button;
      this->sortingBox = gcnew SortByLengthListBox;
      this->SuspendLayout();
      this->Button1->Location = System::Drawing::Point( 64, 16 );
      this->Button1->Name = "Button1";
      this->Button1->Size = System::Drawing::Size( 176, 23 );
      this->Button1->TabIndex = 0;
      this->Button1->Text = "Click me for list sorted by length";
      this->Button1->Click += gcnew System::EventHandler( this, &Form1::Button1_Click );
      array<Object^>^temp0 = {"System","System.Windows.Forms","System.Xml","System.Net","System.Drawing","System.IO"};
      this->sortingBox->Items->AddRange( temp0 );
      this->sortingBox->Location = System::Drawing::Point( 72, 48 );
      this->sortingBox->Size = System::Drawing::Size( 120, 95 );
      this->sortingBox->TabIndex = 1;
      this->ClientSize = System::Drawing::Size( 292, 266 );
      this->Controls->Add( this->sortingBox );
      this->Controls->Add( this->Button1 );
      this->Name = "Form1";
      this->Text = "Sort Example";
      this->ResumeLayout( false );
   }

private:
   void Button1_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Set the Sorted property to True to raise the overridden Sort
      // method.
      sortingBox->Sorted = true;
   }

};

int main()
{
   Application::Run( gcnew Form1 );
}

// The following code example demonstrates using the ListBox.Sort method
// by inheriting from the ListBox class and overriding the Sort method.


using System.Drawing;
using System.Windows.Forms;

public class Form1:
	System.Windows.Forms.Form
{

	internal System.Windows.Forms.Button Button1;
	internal SortByLengthListBox sortingBox;
	
	public Form1() : base()
	{        
		this.Button1 = new System.Windows.Forms.Button();
		this.sortingBox = 
			new SortByLengthListBox();
		this.SuspendLayout();
		this.Button1.Location = new System.Drawing.Point(64, 16);
		this.Button1.Name = "Button1";
		this.Button1.Size = new System.Drawing.Size(176, 23);
		this.Button1.TabIndex = 0;
		this.Button1.Text = "Click me for list sorted by length";
		this.Button1.Click += new System.EventHandler(Button1_Click);
		this.sortingBox.Items.AddRange(new object[]{"System", 
			"System.Windows.Forms", "System.Xml", "System.Net", 
			"System.Drawing", "System.IO"});
		this.sortingBox.Location = 
			new System.Drawing.Point(72, 48);
		this.sortingBox.Size = 
			new System.Drawing.Size(120, 95);
		this.sortingBox.TabIndex = 1;
		this.ClientSize = new System.Drawing.Size(292, 266);
		this.Controls.Add(this.sortingBox);
		this.Controls.Add(this.Button1);
		this.Name = "Form1";
		this.Text = "Sort Example";
		this.ResumeLayout(false);
	}
	
   	public static void Main()
	{
		Application.Run(new Form1());
	}

    
	private void Button1_Click(System.Object sender, System.EventArgs e)
	{
		// Set the Sorted property to True to raise the overridden Sort
		// method.
		sortingBox.Sorted = true;
	}
}

// This class inherits from ListBox and implements a different 
// sorting method. Sort will be called by setting the class's Sorted
// property to True.
public class SortByLengthListBox:
	ListBox

{
	public SortByLengthListBox() : base()
	{        
	}

	// Overrides the parent class Sort to perform a simple
	// bubble sort on the length of the string contained in each item.
	protected override void Sort()
	{
		if (Items.Count > 1)
		{
			bool swapped;
			do
			{
				int counter = Items.Count - 1;
				swapped = false;
				
				while (counter > 0)
				{
					// Compare the items' length. 
					if (Items[counter].ToString().Length  
						< Items[counter-1].ToString().Length)
					{
						// Swap the items.
						object temp = Items[counter];
						Items[counter] = Items[counter-1];
						Items[counter-1] = temp;
						swapped = true;
					}
					// Decrement the counter.
					counter -= 1;
				}
			}
			while((swapped==true));
		}
	}
}


Imports System.Drawing
Imports System.Windows.Forms

Public Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub New()
        MyBase.New()
        Me.Button1 = New System.Windows.Forms.Button
        Me.SortByLengthListBox1 = New SortByLengthListBox
        Me.SuspendLayout()
        Me.Button1.Location = New System.Drawing.Point(64, 16)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(176, 23)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Click me for list sorted by length"
        Me.SortByLengthListBox1.Items.AddRange(New Object() {"System", _
            "System.Windows.Forms", "System.Xml", _
            "System.Net", "System.Drawing", "System.IO"})
        Me.SortByLengthListBox1.Location = New System.Drawing.Point(72, 48)
        Me.SortByLengthListBox1.Name = "SortByLengthListBox1"
        Me.SortByLengthListBox1.Size = New System.Drawing.Size(120, 95)
        Me.SortByLengthListBox1.TabIndex = 1
        Me.ClientSize = New System.Drawing.Size(292, 266)
        Me.Controls.Add(Me.SortByLengthListBox1)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "Sort Example"
        Me.ResumeLayout(False)

    End Sub

    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents SortByLengthListBox1 As SortByLengthListBox

    Public Shared Sub Main()
        Application.Run(New Form1)
    End Sub

    
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        ' Set the Sorted property to True to raise the overridden Sort
        ' method.
        SortByLengthListBox1.Sorted = True
    End Sub
End Class

' This class inherits from ListBox and implements a different 
' sorting method. Sort will be called by setting the class's Sorted
' property to True.
Public Class SortByLengthListBox
    Inherits ListBox

    Public Sub New()
        MyBase.New()
    End Sub

    ' Overrides the parent class Sort to perform a simple
    ' bubble sort on the length of the string contained in each item.
    Protected Overrides Sub Sort()
        If (Items.Count > 1) Then

            Dim swapped As Boolean

            Do
                Dim counter As Integer = Items.Count - 1
                swapped = False
                While (counter > 0)

                    ' Compare the items' length.
                    If Items(counter).ToString.Length < _
                       Items(counter - 1).ToString.Length Then

                        ' If true, swap the items.
                        Dim temp As Object = Items(counter)
                        Items(counter) = Items(counter - 1)
                        Items(counter - 1) = temp
                        swapped = True

                    End If
                    ' Decrement the counter.
                    counter -= 1
                End While
            Loop While (swapped = True)
        End If
    End Sub

End Class

注釈

SortSortedプロパティがtrueの場合、コレクションに各項目を強制的に追加します。Sort forces the collection to add each item back to itself if the Sorted property is true. 各項目は正しい位置に挿入されます。Each item is then inserted into the correct position.

注意 (継承者)

派生クラスでこのメソッドをオーバーライドして、独自の並べ替えルーチンを提供できます。You can override this method in your derived class to provide your own sorting routine. Sortedプロパティをに設定trueしてSort() 、オーバーライドされたメソッドの結果にアクセスします。Access the results of the overridden Sort() method by setting the Sorted property to true. ListBox項目を追加する場合は、まず項目を並べ替えてから、新しい項目を追加する方が効率的です。When adding items to a ListBox, it is more efficient to sort the items first and then add new items.

適用対象

こちらもご覧ください