Как контролировать, когда изменяется элемент коллекции (интерфейс: System.Collections.ICollection
)? Я пытаюсь сохранить порядок столбцов в System.Windows.Forms.ListView.Columns
.Сохранение состояния пользовательского интерфейса в программе C#
Я создал делегат для public event ColumnReorderedEventHandler ColumnReordered;
this.MyListView.ColumnReordered += new System.Windows.Forms.ColumnReorderedEventHandler(ColumnReordered);
И когда мой класс вызывается:
public void ColumnReordered(object sender, EventArgs e)
{
ListView.ColumnHeaderCollection chc = sender as ListView.ColumnHeaderCollection;
ColumnReorderedEvemtArgs crea = e as ColumnReorderedEventArgs;
if ((chc == null) || (crea == null)) return;
// Prints expected values.
Console.WriteLine("{0} -> {1}", crea.OldDisplayIndex, crea.NewDisplayIndex);
// Prints previous state; NOT current state.
for (int k = 0; k < chc.Count; k++)
{
ColumnHeader columnHeader = chc[k] as ColumnHeader;
if (columnHeader == null)
break;
Console.WriteLine("{0}", columnHeader.DisplayIndex);
}
}
Это приводит меня к мысли, что это не там, где я хочу сохранить состояние как изменения не отражены в возвращенном объекте (sender
). Как я могу сохранить упорядочение столбцов сразу же, как пользователь манипулирует ими?
Это потому, что есть возможность отменить переупорядочение - см. Свойство «Отменить» в [ColumnReorderedEventArgs] (http://msdn.microsoft.com/en-us/library/system.windows.forms.columnreorderedeventargs.aspx). Если все прикрепленные обработчики возвращают false в Cancel, предлагаемое изменение будет выполнено. –
Какова цель сохранения порядка столбцов? История, чтобы они могли «отменить» упорядочение столбцов? Разная логика должна выполняться, если в определенном порядке? – Jay
@Jay, я хочу сохранить порядок между использованиями для пользователя. Кроме того, каждый пользователь может иметь свое собственное предпочтительное устройство отображения. –