Изменить сортировку 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 вместо. В событии загрузки я просто прохожу StringCollection с foreach и создаю элементы управления.
foreach (string line in Properties.Settings.Default.MessageStringCollection)
{
if (!String.IsNullOrEmpty(line))
{
createNewMessageButton(line);
}
}
3 ответа
Иногда я не должен пытаться решать проблемы, если я слишком устал или просто не задаю вопросы, не спя или тратя больше времени на обдумывание решения. Я смог решить проблему самостоятельно, решение довольно простое, если я просто попытаюсь использовать то, что уже использую, для обычной сортировки и изменить его на 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
Я еще не работал со свойствами, но почему бы не создать пользовательский тип свойств, например "SortedControlsList". Вы можете проверить предложение по реализации на codeproject