using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace System.Windows.Forms;
/// ComboBox 和 ListBox 的共同基类:列表项、选中项
public abstract class ListControl : Control
{
/// 选中项的序号。列表项增删时直接调整(和 WinForms 一样不触发 SelectedIndexChanged)
private protected int SelectedIndexValue = -1;
public abstract int SelectedIndex { get; set; }
public string DisplayMember { get; set; } = "";
public string ValueMember { get; set; } = "";
public event EventHandler? SelectedValueChanged;
protected virtual void OnSelectedValueChanged(EventArgs e) => SelectedValueChanged?.Invoke(this, e);
public string GetItemText(object? item) => item?.ToString() ?? "";
/// 列表项变化后调用:把新的列表和选中项发给浏览器
internal abstract void ItemsChanged();
/// Items.Clear() 时调用:先取消选中,再刷新列表
internal abstract void ItemsCleared();
internal void ItemInserted(int index)
{
if (SelectedIndexValue >= index) SelectedIndexValue++;
ItemsChanged();
}
/// 删掉的正是选中项时取消选中,删掉前面的项时选中项序号前移
internal void ItemRemoved(int index)
{
if (SelectedIndexValue == index) SelectedIndexValue = -1;
else if (SelectedIndexValue > index) SelectedIndexValue--;
ItemsChanged();
}
protected string[] ItemTexts(IEnumerable