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

機能を追加するだけの場合は、拡張メソッドを追加してこの機能を追加することもできます。CSV 文字列への GetSelectItems と文字列配列からの AddListItems の 2 つの簡単な例を次に示します。

    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 に渡すオーバーロードを含めます。

また、値を CSV リストとして返すように ToString() をオーバーライドします。

于 2010-11-22T22:29:33.800 に答える