在我当前的项目中,用户可以创建一个停靠在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);
}
}
答案 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