自定义列表框排序

Arc*_*ian 2 c# sorting listbox winforms

我需要对许多列表框中包含的数据进行排序.用户将能够使用无线电盒在两种不同类型的排序之间进行选择,其中一种默认情况下在表格加载时进行检查.我已经创建了所需的IF语句,以便测试该单选按钮的检查条件是否为真.但我需要一些帮助来创建自定义排序算法.

每个列表包含相似的查看数据,每行开始的前缀唯一不同.例如,第一个列表框中的每一行以前缀"G30"开头,第二个列表框将以"G31"开头,依此类推.总共有10个列表框(就前缀而言是G30-G39).

第一个搜索算法必须按前13个字符的数字顺序对行进行排序.

示例:这是排序前数据的外观

G35:45:58:11 JG07
G35:45:20:41 JG01
G35:58:20:21 JG03
G35:66:22:20 JG05
G35:45:85:21 JG02
G35:64:56:11 JG03
G35:76:35:11 JG02
G35:77:97:12 JG03
G35:54:29:11 JG01
G35:55:51:20 JG01
G35:76:24:20 JG06
G35:76:55:11 JG01
Run Code Online (Sandbox Code Playgroud)

这就是排序后应该如何看待

G35:45:20:41 JG01
G35:45:58:11 JG07
G35:45:85:21 JG02
G35:54:29:11 JG01
G35:55:51:20 JG01
G35:58:20:21 JG03
G35:64:56:11 JG03
G35:66:22:20 JG05
G35:76:24:20 JG06
G35:76:35:11 JG02
G35:76:55:11 JG01
G35:77:97:12 JG03
Run Code Online (Sandbox Code Playgroud)

如您所见,前缀是相同的.因此它被排序,最低,首先是下一对整数,然后是下一对和下一对,而不是"JG"之后的值.

第二种排序算法将忽略前13个字符,并按"JG"之后的值的顺序排序,最高的第一个.

任何帮助?这里有一些代表给你:)

提前致谢

编辑

namespace Jumpgate_Network_Program
{
    partial class ViewForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;


    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.tabconSubsectors = new System.Windows.Forms.TabControl();
        this.tabG30 = new System.Windows.Forms.TabPage();
        this.lstG30 = new System.Windows.Forms.ListBox();
        this.tabG31 = new System.Windows.Forms.TabPage();
        this.lstG31 = new System.Windows.Forms.ListBox();
        this.tabG32 = new System.Windows.Forms.TabPage();
        this.lstG32 = new System.Windows.Forms.ListBox();
        this.tabG33 = new System.Windows.Forms.TabPage();
        this.lstG33 = new System.Windows.Forms.ListBox();
        this.tabG34 = new System.Windows.Forms.TabPage();
        this.lstG34 = new System.Windows.Forms.ListBox();
        this.tabG35 = new System.Windows.Forms.TabPage();
        this.lstG35 = new System.Windows.Forms.ListBox();
        this.tabG36 = new System.Windows.Forms.TabPage();
        this.lstG36 = new System.Windows.Forms.ListBox();
        this.tabG37 = new System.Windows.Forms.TabPage();
        this.lstG37 = new System.Windows.Forms.ListBox();
        this.tabG38 = new System.Windows.Forms.TabPage();
        this.lstG38 = new System.Windows.Forms.ListBox();
        this.tabG39 = new System.Windows.Forms.TabPage();
        this.lstG39 = new System.Windows.Forms.ListBox();
        this.tabSearch = new System.Windows.Forms.TabPage();
        this.btnSearch = new System.Windows.Forms.Button();
        this.txtSearch = new System.Windows.Forms.TextBox();
        this.lstResult = new System.Windows.Forms.ListBox();
        this.label1 = new System.Windows.Forms.Label();
        this.grpOptions = new System.Windows.Forms.GroupBox();
        this.rbtnHighest = new System.Windows.Forms.RadioButton();
        this.rbtnCoord = new System.Windows.Forms.RadioButton();
        this.tabconSubsectors.SuspendLayout();
        this.tabG30.SuspendLayout();
        this.tabG31.SuspendLayout();
        this.tabG32.SuspendLayout();
        this.tabG33.SuspendLayout();
        this.tabG34.SuspendLayout();
        this.tabG35.SuspendLayout();
        this.tabG36.SuspendLayout();
        this.tabG37.SuspendLayout();
        this.tabG38.SuspendLayout();
        this.tabG39.SuspendLayout();
        this.tabSearch.SuspendLayout();
        this.grpOptions.SuspendLayout();
        this.SuspendLayout();
        // 
        // tabconSubsectors
        // 
        this.tabconSubsectors.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
        this.tabconSubsectors.Controls.Add(this.tabG30);
        this.tabconSubsectors.Controls.Add(this.tabG31);
        this.tabconSubsectors.Controls.Add(this.tabG32);
        this.tabconSubsectors.Controls.Add(this.tabG33);
        this.tabconSubsectors.Controls.Add(this.tabG34);
        this.tabconSubsectors.Controls.Add(this.tabG35);
        this.tabconSubsectors.Controls.Add(this.tabG36);
        this.tabconSubsectors.Controls.Add(this.tabG37);
        this.tabconSubsectors.Controls.Add(this.tabG38);
        this.tabconSubsectors.Controls.Add(this.tabG39);
        this.tabconSubsectors.Controls.Add(this.tabSearch);
        this.tabconSubsectors.Location = new System.Drawing.Point(13, 39);
        this.tabconSubsectors.Name = "tabconSubsectors";
        this.tabconSubsectors.SelectedIndex = 0;
        this.tabconSubsectors.Size = new System.Drawing.Size(282, 305);
        this.tabconSubsectors.TabIndex = 0;
        // 
        // tabG30
        // 
        this.tabG30.Controls.Add(this.lstG30);
        this.tabG30.Location = new System.Drawing.Point(4, 22);
        this.tabG30.Name = "tabG30";
        this.tabG30.Padding = new System.Windows.Forms.Padding(3);
        this.tabG30.Size = new System.Drawing.Size(274, 279);
        this.tabG30.TabIndex = 0;
        this.tabG30.Text = "G30";
        this.tabG30.UseVisualStyleBackColor = true;
        // 
        // lstG30
        // 
        this.lstG30.FormattingEnabled = true;
        this.lstG30.Location = new System.Drawing.Point(7, 7);
        this.lstG30.Name = "lstG30";
        this.lstG30.Size = new System.Drawing.Size(259, 264);
        this.lstG30.TabIndex = 0;
        // 
        // tabG31
        // 
        this.tabG31.Controls.Add(this.lstG31);
        this.tabG31.Location = new System.Drawing.Point(4, 22);
        this.tabG31.Name = "tabG31";
        this.tabG31.Padding = new System.Windows.Forms.Padding(3);
        this.tabG31.Size = new System.Drawing.Size(274, 279);
        this.tabG31.TabIndex = 1;
        this.tabG31.Text = "G31";
        this.tabG31.UseVisualStyleBackColor = true;
        // 
        // lstG31
        // 
        this.lstG31.FormattingEnabled = true;
        this.lstG31.Location = new System.Drawing.Point(8, 7);
        this.lstG31.Name = "lstG31";
        this.lstG31.Size = new System.Drawing.Size(259, 264);
        this.lstG31.TabIndex = 1;
        // 
        // tabG32
        // 
        this.tabG32.Controls.Add(this.lstG32);
        this.tabG32.Location = new System.Drawing.Point(4, 22);
        this.tabG32.Name = "tabG32";
        this.tabG32.Padding = new System.Windows.Forms.Padding(3);
        this.tabG32.Size = new System.Drawing.Size(274, 279);
        this.tabG32.TabIndex = 2;
        this.tabG32.Text = "G32";
        this.tabG32.UseVisualStyleBackColor = true;
        // 
        // lstG32
        // 
        this.lstG32.FormattingEnabled = true;
        this.lstG32.Location = new System.Drawing.Point(8, 7);
        this.lstG32.Name = "lstG32";
        this.lstG32.Size = new System.Drawing.Size(259, 264);
        this.lstG32.TabIndex = 1;
        // 
        // tabG33
        // 
        this.tabG33.Controls.Add(this.lstG33);
        this.tabG33.Location = new System.Drawing.Point(4, 22);
        this.tabG33.Name = "tabG33";
        this.tabG33.Padding = new System.Windows.Forms.Padding(3);
        this.tabG33.Size = new System.Drawing.Size(274, 279);
        this.tabG33.TabIndex = 3;
        this.tabG33.Text = "G33";
        this.tabG33.UseVisualStyleBackColor = true;
        // 
        // lstG33
        // 
        this.lstG33.FormattingEnabled = true;
        this.lstG33.Location = new System.Drawing.Point(8, 7);
        this.lstG33.Name = "lstG33";
        this.lstG33.Size = new System.Drawing.Size(259, 264);
        this.lstG33.TabIndex = 1;
        // 
        // tabG34
        // 
        this.tabG34.Controls.Add(this.lstG34);
        this.tabG34.Location = new System.Drawing.Point(4, 22);
        this.tabG34.Name = "tabG34";
        this.tabG34.Padding = new System.Windows.Forms.Padding(3);
        this.tabG34.Size = new System.Drawing.Size(274, 279);
        this.tabG34.TabIndex = 4;
        this.tabG34.Text = "G34";
        this.tabG34.UseVisualStyleBackColor = true;
        // 
        // lstG34
        // 
        this.lstG34.FormattingEnabled = true;
        this.lstG34.Location = new System.Drawing.Point(8, 7);
        this.lstG34.Name = "lstG34";
        this.lstG34.Size = new System.Drawing.Size(259, 264);
        this.lstG34.TabIndex = 1;
        // 
        // tabG35
        // 
        this.tabG35.Controls.Add(this.lstG35);
        this.tabG35.Location = new System.Drawing.Point(4, 22);
        this.tabG35.Name = "tabG35";
        this.tabG35.Padding = new System.Windows.Forms.Padding(3);
        this.tabG35.Size = new System.Drawing.Size(274, 279);
        this.tabG35.TabIndex = 5;
        this.tabG35.Text = "G35";
        this.tabG35.UseVisualStyleBackColor = true;
        // 
        // lstG35
        // 
        this.lstG35.FormattingEnabled = true;
        this.lstG35.Location = new System.Drawing.Point(8, 7);
        this.lstG35.Name = "lstG35";
        this.lstG35.Size = new System.Drawing.Size(259, 264);
        this.lstG35.TabIndex = 1;
        // 
        // tabG36
        // 
        this.tabG36.Controls.Add(this.lstG36);
        this.tabG36.Location = new System.Drawing.Point(4, 22);
        this.tabG36.Name = "tabG36";
        this.tabG36.Padding = new System.Windows.Forms.Padding(3);
        this.tabG36.Size = new System.Drawing.Size(274, 279);
        this.tabG36.TabIndex = 6;
        this.tabG36.Text = "G36";
        this.tabG36.UseVisualStyleBackColor = true;
        // 
        // lstG36
        // 
        this.lstG36.FormattingEnabled = true;
        this.lstG36.Location = new System.Drawing.Point(8, 7);
        this.lstG36.Name = "lstG36";
        this.lstG36.Size = new System.Drawing.Size(259, 264);
        this.lstG36.TabIndex = 1;
        // 
        // tabG37
        // 
        this.tabG37.Controls.Add(this.lstG37);
        this.tabG37.Location = new System.Drawing.Point(4, 22);
        this.tabG37.Name = "tabG37";
        this.tabG37.Padding = new System.Windows.Forms.Padding(3);
        this.tabG37.Size = new System.Drawing.Size(274, 279);
        this.tabG37.TabIndex = 7;
        this.tabG37.Text = "G37";
        this.tabG37.UseVisualStyleBackColor = true;
        // 
        // lstG37
        // 
        this.lstG37.FormattingEnabled = true;
        this.lstG37.Location = new System.Drawing.Point(8, 7);
        this.lstG37.Name = "lstG37";
        this.lstG37.Size = new System.Drawing.Size(259, 264);
        this.lstG37.TabIndex = 1;
        // 
        // tabG38
        // 
        this.tabG38.Controls.Add(this.lstG38);
        this.tabG38.Location = new System.Drawing.Point(4, 22);
        this.tabG38.Name = "tabG38";
        this.tabG38.Padding = new System.Windows.Forms.Padding(3);
        this.tabG38.Size = new System.Drawing.Size(274, 279);
        this.tabG38.TabIndex = 8;
        this.tabG38.Text = "G38";
        this.tabG38.UseVisualStyleBackColor = true;
        // 
        // lstG38
        // 
        this.lstG38.FormattingEnabled = true;
        this.lstG38.Location = new System.Drawing.Point(8, 7);
        this.lstG38.Name = "lstG38";
        this.lstG38.Size = new System.Drawing.Size(259, 264);
        this.lstG38.TabIndex = 1;
        // 
        // tabG39
        // 
        this.tabG39.Controls.Add(this.lstG39);
        this.tabG39.Location = new System.Drawing.Point(4, 22);
        this.tabG39.Name = "tabG39";
        this.tabG39.Padding = new System.Windows.Forms.Padding(3);
        this.tabG39.Size = new System.Drawing.Size(274, 279);
        this.tabG39.TabIndex = 9;
        this.tabG39.Text = "G39";
        this.tabG39.UseVisualStyleBackColor = true;
        // 
        // lstG39
        // 
        this.lstG39.FormattingEnabled = true;
        this.lstG39.Location = new System.Drawing.Point(8, 7);
        this.lstG39.Name = "lstG39";
        this.lstG39.Size = new System.Drawing.Size(259, 264);
        this.lstG39.TabIndex = 1;
        // 
        // tabSearch
        // 
        this.tabSearch.Controls.Add(this.btnSearch);
        this.tabSearch.Controls.Add(this.txtSearch);
        this.tabSearch.Controls.Add(this.lstResult);
        this.tabSearch.Location = new System.Drawing.Point(4, 22);
        this.tabSearch.Name = "tabSearch";
        this.tabSearch.Padding = new System.Windows.Forms.Padding(3);
        this.tabSearch.Size = new System.Drawing.Size(274, 279);
        this.tabSearch.TabIndex = 10;
        this.tabSearch.Text = "Search";
        this.tabSearch.UseVisualStyleBackColor = true;
        // 
        // btnSearch
        // 
        this.btnSearch.Location = new System.Drawing.Point(150, 47);
        this.btnSearch.Name = "btnSearch";
        this.btnSearch.Size = new System.Drawing.Size(75, 19);
        this.btnSearch.TabIndex = 3;
        this.btnSearch.Text = "Search";
        this.btnSearch.UseVisualStyleBackColor = true;
        // 
        // txtSearch
        // 
        this.txtSearch.Location = new System.Drawing.Point(8, 46);
        this.txtSearch.Name = "txtSearch";
        this.txtSearch.Size = new System.Drawing.Size(136, 20);
        this.txtSearch.TabIndex = 2;
        // 
        // lstResult
        // 
        this.lstResult.FormattingEnabled = true;
        this.lstResult.Location = new System.Drawing.Point(8, 72);
        this.lstResult.Name = "lstResult";
        this.lstResult.Size = new System.Drawing.Size(259, 199);
        this.lstResult.TabIndex = 1;
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
        this.label1.Location = new System.Drawing.Point(13, 13);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(131, 20);
        this.label1.TabIndex = 1;
        this.label1.Text = "Select Subsector";
        // 
        // grpOptions
        // 
        this.grpOptions.Controls.Add(this.rbtnHighest);
        this.grpOptions.Controls.Add(this.rbtnCoord);
        this.grpOptions.Location = new System.Drawing.Point(301, 68);
        this.grpOptions.Name = "grpOptions";
        this.grpOptions.Size = new System.Drawing.Size(101, 72);
        this.grpOptions.TabIndex = 2;
        this.grpOptions.TabStop = false;
        this.grpOptions.Text = "Sort by";
        // 
        // rbtnHighest
        // 
        this.rbtnHighest.AutoSize = true;
        this.rbtnHighest.Location = new System.Drawing.Point(7, 44);
        this.rbtnHighest.Name = "rbtnHighest";
        this.rbtnHighest.Size = new System.Drawing.Size(90, 17);
        this.rbtnHighest.TabIndex = 1;
        this.rbtnHighest.Text = "Highest Level";
        this.rbtnHighest.UseVisualStyleBackColor = true;
        this.rbtnHighest.CheckedChanged += new System.EventHandler(this.rbtnHighest_CheckedChanged);
        // 
        // rbtnCoord
        // 
        this.rbtnCoord.AutoSize = true;
        this.rbtnCoord.Checked = true;
        this.rbtnCoord.Location = new System.Drawing.Point(7, 20);
        this.rbtnCoord.Name = "rbtnCoord";
        this.rbtnCoord.Size = new System.Drawing.Size(84, 17);
        this.rbtnCoord.TabIndex = 0;
        this.rbtnCoord.TabStop = true;
        this.rbtnCoord.Text = "Co-ordinates";
        this.rbtnCoord.UseVisualStyleBackColor = true;
        this.rbtnCoord.CheckedChanged += new System.EventHandler(this.rbtnCoord_CheckedChanged);
        // 
        // ViewForm
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(408, 356);
        this.Controls.Add(this.grpOptions);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.tabconSubsectors);
        this.MaximizeBox = false;
        this.Name = "ViewForm";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "View Jumpgates - JNP";
        this.Load += new System.EventHandler(this.ViewForm_Load);
        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ViewForm_FormClosing);
        this.tabconSubsectors.ResumeLayout(false);
        this.tabG30.ResumeLayout(false);
        this.tabG31.ResumeLayout(false);
        this.tabG32.ResumeLayout(false);
        this.tabG33.ResumeLayout(false);
        this.tabG34.ResumeLayout(false);
        this.tabG35.ResumeLayout(false);
        this.tabG36.ResumeLayout(false);
        this.tabG37.ResumeLayout(false);
        this.tabG38.ResumeLayout(false);
        this.tabG39.ResumeLayout(false);
        this.tabSearch.ResumeLayout(false);
        this.tabSearch.PerformLayout();
        this.grpOptions.ResumeLayout(false);
        this.grpOptions.PerformLayout();
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.TabControl tabconSubsectors;
    private System.Windows.Forms.TabPage tabG30;
    private System.Windows.Forms.TabPage tabG31;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.TabPage tabG32;
    private System.Windows.Forms.TabPage tabG33;
    private System.Windows.Forms.TabPage tabG34;
    private System.Windows.Forms.TabPage tabG35;
    private System.Windows.Forms.TabPage tabG36;
    private System.Windows.Forms.TabPage tabG37;
    private System.Windows.Forms.TabPage tabG38;
    private System.Windows.Forms.TabPage tabG39;
    private System.Windows.Forms.TabPage tabSearch;
    private System.Windows.Forms.CustomListBox lstG30;
    private System.Windows.Forms.GroupBox grpOptions;
    private System.Windows.Forms.RadioButton rbtnHighest;
    private System.Windows.Forms.RadioButton rbtnCoord;
    private System.Windows.Forms.CustomListBox lstG31;
    private System.Windows.Forms.CustomListBox lstG32;
    private System.Windows.Forms.CustomListBox lstG33;
    private System.Windows.Forms.CustomListBox lstG34;
    private System.Windows.Forms.CustomListBox lstG35;
    private System.Windows.Forms.CustomListBox lstG36;
    private System.Windows.Forms.CustomListBox lstG37;
    private System.Windows.Forms.CustomListBox lstG38;
    private System.Windows.Forms.CustomListBox lstG39;
    private System.Windows.Forms.Button btnSearch;
    private System.Windows.Forms.TextBox txtSearch;
    private System.Windows.Forms.ListBox lstResult;
}
Run Code Online (Sandbox Code Playgroud)

}

Pao*_*sco 5

The first algorithm is the same as alphabetic ordering, so you can use directly:

int res = string.Compare(first,second);
Run Code Online (Sandbox Code Playgroud)

The second algorithm is descending alphabetic ordering of the last two chars:

int res = -string.Compare(first.Substring(first.Length - 2, 2), second.Substring(first.Length - 2, 2));
Run Code Online (Sandbox Code Playgroud)

To sort the list you have two options; the first is to create your own ListBox subclass and override the Sort method as detailed on the MSDN page for ListBox.Sort Method.

The second (easier and uglier) is to put all the items in a collection, order the collection and replace the items in the list, something like this:

using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {

        void SortListBox() {
            List<string> items = new List<string>();
            foreach (string value in listBox1.Items) {
                items.Add(value);
            }
            items.Sort((first, second) => string.Compare(first, second));
            listBox1.Items.Clear();
            listBox1.Items.AddRange(items.ToArray());
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

Hope this helps...