2

我必须重新定义 ListBox 类以确保它返回所有选定项目的 csv 字符串,并且还应该接受 csv 字符串并在需要时填充列表框。可以说我有这个代码。我必须覆盖哪些功能,我该怎么做?

using System;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MY.WebControl
{
    public class ListBoxString : ListBox
    {

    }
}
4

2 回答 2

4

如果您只想添加功能,您还可以添加扩展方法来添加此功能。下面是 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);
        }
    }
于 2010-11-22T22:47:30.900 回答
1

你确定你的意思是覆盖?还是您真的是指“酌情覆盖和超载”?

我将重载 Add 方法以包含一个采用 CSV 字符串的重载,将其解析为字符串数组(或列表)并将其传递给 AddRange。

我还将覆盖 ToString() 以将值作为 CSV 列表返回。

于 2010-11-22T22:29:33.800 回答