更改 StringCollection 的排序

Change sorting of StringCollection

在我当前的项目中,用户可以创建一个停靠在 TableLayoutPanel 中的控件。控件名称保存在 StringCollection 中,每次启动程序时都会重新创建控件。 我想实现一个允许用户更改控件顺序的功能。移动部分正在工作,问题是下次程序启动时,控件会以旧顺序重新创建,因为它们是从 StringCollection 创建的。这意味着要更改控件的顺序并保留它以备将来使用,我将不得不更改 StringCollection 的排序。有什么办法吗?如果是,我该怎么做?

目前,我会使用上下文菜单中的这段代码向上移动控件:

if (this.Parent == null)
    return;

var index = this.Parent.Controls.GetChildIndex(this);
if (index <= this.Parent.Controls.Count)
    this.Parent.Controls.SetChildIndex(this, index - 1);

和观察。用 +1 将其向下移动。 在加载事件中,我只是通过带有 foreach 的 StringCollection 并创建控件。

foreach (string line in Properties.Settings.Default.MessageStringCollection)
{
    if (!String.IsNullOrEmpty(line))
    {
        createNewMessageButton(line);
    }
}

我还没有使用属性,但为什么不创建自定义属性类型,例如"SortedControlsList"。您可以在 codeproject

上查看实施建议

有时候,如果我太累了,我不应该尝试解决问题,或者不睡觉或花更多时间思考解决方案就不要提出问题。 我能够自己解决问题,如果我只是尝试使用我已经使用的正常排序并将其更改为 StringCollection,则解决方案非常简单。

var SCindex = Properties.Settings.Default.MessageStringCollection.IndexOf(Message);
if (SCindex > 0)
{
    Properties.Settings.Default.MessageStringCollection.Remove(String.Format("{0}", Message));
    Properties.Settings.Default.MessageStringCollection.Insert(SCindex - 1, Message);
    Properties.Settings.Default.Save();
}

您需要 更新 您的 属性 以使其在下一次保持您希望的状态启动。

参见:https://msdn.microsoft.com/en-us/library/xb5dd1f1(v=vs.110).aspx