ListBox.Sort 方法

ListBox 中的项排序。

**命名空间:**System.Windows.Forms
**程序集:**System.Windows.Forms(在 system.windows.forms.dll 中)

语法

声明
Protected Overridable Sub Sort
用法

Me.Sort
protected virtual void Sort ()
protected:
virtual void Sort ()
protected void Sort ()
protected function Sort ()

备注

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

给继承者的说明 可以在派生类中重写此方法,以提供您自己的排序例程。通过将 Sorted 属性设置为 true,来访问重写的 Sort 方法的结果。向 ListBox 添加项时,如果先对项进行排序,然后添加新项,则效率更高。

示例

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

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 - 1 > 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
// 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 - 1 > 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));
        }
    }
}
// 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 - 1 > 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.
import System.Drawing.*;
import System.Windows.Forms.*;

public class Form1 extends System.Windows.Forms.Form
{
    private System.Windows.Forms.Button button1;
    private SortByLengthListBox sortingBox;

    public Form1()
    {
        this.button1 = new System.Windows.Forms.Button();
        this.sortingBox = new SortByLengthListBox();
        this.SuspendLayout();
        this.button1.set_Location(new System.Drawing.Point(64, 16));
        this.button1.set_Name("Button1");
        this.button1.set_Size(new System.Drawing.Size(176, 23));
        this.button1.set_TabIndex(0);
        this.button1.set_Text("Click me for list sorted by length");
        this.button1.add_Click(new System.EventHandler(button1_Click));
        this.sortingBox.get_Items().AddRange(new Object[] { "System", 
            "System.Windows.Forms", "System.Xml", "System.Net", 
            "System.Drawing", "System.IO" });
        this.sortingBox.set_Location(new System.Drawing.Point(72, 48));
        this.sortingBox.set_Size(new System.Drawing.Size(120, 95));
        this.sortingBox.set_TabIndex(1);
        this.set_ClientSize(new System.Drawing.Size(292, 266));
        this.get_Controls().Add(this.sortingBox);
        this.get_Controls().Add(this.button1);
        this.set_Name("Form1");
        this.set_Text("Sort Example");
        this.ResumeLayout(false);
    } //Form1

    public static void main(String[] args)
    {
        Application.Run(new Form1());
    } //main

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

// 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 extends ListBox
{
    public SortByLengthListBox()
    {
        super();
    } //SortByLengthListBox

    // Overrides the parent class Sort to perform a simple
    // bubble sort on the length of the string contained in each item.
    protected void Sort()
    {
        if (get_Items().get_Count() > 1) {
            boolean swapped;
            do {
                int counter = get_Items().get_Count() - 1;
                swapped = false;

                while (counter - 1 > 0) {
                    // Compare the items' length. 
                    if (get_Items().get_Item(counter).ToString().get_Length() 
                        < get_Items().get_Item((counter - 1)).
                        ToString().get_Length()) {
                        // Swap the items.
                        Object temp = get_Items().get_Item(counter);
                        get_Items().set_Item(counter, get_Items().
                            get_Item((counter - 1)));
                        get_Items().set_Item((counter - 1), temp);
                        swapped = true;
                    }
                    // Decrement the counter.
                    counter -= 1;
                }
            } while (swapped == true);
        }
    } //Sort
} //SortByLengthListBox

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

ListBox 类
ListBox 成员
System.Windows.Forms 命名空间
Sorted