| File: System\Windows\Forms\Design\ListViewSubItemCollectionEditor.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; namespace System.Windows.Forms.Design; /// <summary> /// Provides an editor for a ListView subitems collection. /// </summary> internal class ListViewSubItemCollectionEditor : CollectionEditor { private static int s_count; private ListViewItem.ListViewSubItem _firstSubItem; /// <summary> /// Initializes a new instance of the <see cref="ListViewSubItemCollectionEditor"/> class. /// </summary> public ListViewSubItemCollectionEditor(Type type) : base(type) { } /// <inheritdoc /> protected override object CreateInstance(Type type) { object instance = base.CreateInstance(type); // Create a default site-like name. if (instance is ListViewItem.ListViewSubItem item) { item.Name = SR.ListViewSubItemBaseName + s_count++; } return instance; } /// <inheritdoc /> protected override string GetDisplayText(object value) { if (value is null) { return string.Empty; } string text; PropertyDescriptor property = TypeDescriptor.GetDefaultProperty(CollectionType); if (property?.PropertyType == typeof(string)) { text = (string)property.GetValue(value); if (!string.IsNullOrEmpty(text)) { return text; } } text = TypeDescriptor.GetConverter(value).ConvertToString(value); if (string.IsNullOrEmpty(text)) { text = value.GetType().Name; } return text; } protected override object[] GetItems(object editValue) { var subItems = (ListViewItem.ListViewSubItemCollection)editValue; if (subItems.Count == 0) { return []; } // Save the first sub item. _firstSubItem = subItems[0]; if (subItems.Count == 1) { return []; } object[] values = new object[subItems.Count - 1]; int index = 0; IEnumerator enumerator = subItems.GetEnumerator(); enumerator.MoveNext(); while (enumerator.MoveNext()) { values[index++] = enumerator.Current; } return values; } protected override object SetItems(object editValue, object[] value) { IList list = editValue as IList; list.Clear(); list.Add(_firstSubItem); for (int i = 0; i < value.Length; i++) { list.Add(value[i]); } return editValue; } }