更改StringCollection的排序

时间:2018-08-13 05:55:10

标签: c# winforms sorting 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);
    }
}

3 个答案:

答案 0 :(得分:0)

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

上查看实施建议

答案 1 :(得分:0)

有时候,如果我太累了,我就不应该尝试解决问题,或者不睡觉或不花更多时间思考解决方案就不要提出问题。 我能够自己解决问题,如果我只是尝试使用已经用于常规排序并将其更改为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();
}

答案 2 :(得分:0)

您需要 更新 您的媒体资源,以使其在下次启动时保持所需的状态。

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