繁体   English   中英

更改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/zh-cn/library/xb5dd1f1(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM