我必须重新定义 ListBox 类以确保它返回所有选定项目的 csv 字符串,并且还应该接受 csv 字符串并在需要时填充列表框。可以说我有这个代码。我必须覆盖哪些功能,我该怎么做?
using System;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MY.WebControl
{
public class ListBoxString : ListBox
{
}
}
我必须重新定义 ListBox 类以确保它返回所有选定项目的 csv 字符串,并且还应该接受 csv 字符串并在需要时填充列表框。可以说我有这个代码。我必须覆盖哪些功能,我该怎么做?
using System;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MY.WebControl
{
public class ListBoxString : ListBox
{
}
}
如果您只想添加功能,您还可以添加扩展方法来添加此功能。下面是 2 个快速示例,它们分别是 GetSelectItems 到 CSV 字符串和 AddListItems 从字符串数组。
public static string GetSelectedItems(this ListBox lbox)
{
List<string> selectedValues = new List<string>();
int[] selectedIndeces = lbox.GetSelectedIndices();
foreach (int i in selectedIndeces)
selectedValues.Add(lbox.Items[i].Value);
return String.Join(",",selectedValues.ToArray());
}
public static void SetSelectedItems(this ListBox lbox, string[] values)
{
foreach (string value in values)
{
lbox.Items[lbox.Items.IndexOf(lbox.Items.FindByValue(value))].Selected = true;
}
}
public static void AddListItems(this ListBox lbox, string[] values)
{
foreach (string value in values)
{
ListItem item = new ListItem(value);
lbox.Items.Add(item);
}
}
你确定你的意思是覆盖?还是您真的是指“酌情覆盖和超载”?
我将重载 Add 方法以包含一个采用 CSV 字符串的重载,将其解析为字符串数组(或列表)并将其传递给 AddRange。
我还将覆盖 ToString() 以将值作为 CSV 列表返回。