/// <summary>
/// 强制移除列表控件中的指定项。
/// 如果列表控件的项,是由 DataSource 属性增加的。
/// </summary>
/// <param name="lc">要操作的列表控件</param>
/// <param name="indexToRemove">
/// 要移除的项序数,从0开始。
/// 如果不提供,将会使用 SelectedIndex 属性来填充
/// </param>
public static void RemoveItem(ListControl lc, int indexToRemove = -1)
{
int iSelected = -1;
string mDisplay = null;
object ds = null;
IList items = null;
if(lc is ComboBox)
{
items = (lc as ComboBox).Items;
}
if(lc is ListBox)
{
items = (lc as ListBox).Items;
}
if(indexToRemove == -1)
{
indexToRemove = lc.SelectedIndex;
}
if (indexToRemove != -1)
{
iSelected = lc.SelectedIndex;
mDisplay = lc.DisplayMember;
if (lc.DataSource == null)
{
items.RemoveAt(indexToRemove);
MessageBox.Show(lc.SelectedIndex.ToString());
}
else
{
ds = lc.DataSource;
//此操作,会清空 items
lc.DataSource = null;
//ListBox/ComboBox 的 Items 是 IList 类型或数组,而数组也实现了 IList 接口
IList lst = ds as IList;
for(int i = 0; i < lst.Count; i++)
{
if(i != indexToRemove)
items.Add(lst[i]);
}
}
}
if (ds != null)
{
if (lc is ComboBox)
{
ComboBox cbb = lc as ComboBox;
cbb.DataSource = items;
cbb.SelectedIndex = iSelected;
}
if (lc is ListBox)
{
ListBox lb = lc as ListBox;
lb.DataSource = items;
lb.SelectedIndex = iSelected;
}
lc.DisplayMember = mDisplay;
}
}