ListBox.Sort 方法

定义

ListBox 中的项排序。

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

示例

下面的代码示例演示如何使用 Sort 该方法。 该示例演示从 ListBox 类继承并重写 Sort 派生类中的方法以执行用户定义的排序。 若要运行此示例,请将以下代码粘贴到空窗体中。

// 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

注解

Sort 如果 Sorted 属性为 true,则强制集合将每个项重新添加到自身。 然后,将每个项插入到正确的位置。

继承者说明

可以在派生类中重写此方法,以提供自己的排序例程。 通过将属性true设置为 Sorted 来访问重写Sort()方法的结果。 向 a ListBox添加项时,首先对项进行排序,然后添加新项会更高效。

适用于

另请参阅