1

リストボックスにいくつかの項目を追加するための ParameterItem クラスがあります。

class ParameterItem
{
    public string Name { get; set; }
    public string Value { get; set; }

    public ParameterItem(string name, string value)
    {
        Name = name;
        Value = value;
    }

    public override string ToString()
    {
        return Name + " = " + Value;
    }

    public override bool Equals(object obj)
    {
        if (obj is ParameterItem)
            return (Name == ((ParameterItem)obj).Name);

        return false;   
    }

    public override int GetHashCode()
    {
        return Name.ToLowerInvariant().GetHashCode();
    }
}

また、2 つのテキストボックス (名前と値) を使用してリストボックスに項目を追加できます。リストボックス内の項目をクリックすると、テキストボックスに ParameterItem の名前と値が入力されます。リストボックスで選択した ParameterItem の内容を変更する次のコードがあります。

    private void btnSaveParameter_Click(object sender, EventArgs e)
    {
        ParameterItem currentParameter = new ParameterItem(textParameterName.Text,
                                                           textParameterValue.Text);
        // If we already have the parameter set then edit it.
        if (lstbxSetParameters.Items.Contains(currentParameter))
        {
            ((ParameterItem)lstbxSetParameters.SelectedItem).Value = currentParameter.Value;
            lstbxSetParameters.;
        }
        // If it's not set yet then add it to the listbox.
        else
        {
            lstbxSetParameters.Items.Add(currentParameter);
            textParameterName.Text = String.Empty;
            textParameterValue.Text = String.Empty;
        }
    }

問題は、選択した ParameterItem の内容を変更できても、リストボックスで変更されていないように見えることです。

たとえば、リスト ボックスにパラメータがあります。

テストパラメータ = 10

そして、ParameterItem を次のように変更します。

テストパラメータ = 5

しかし、リストボックスではまだ次のように見えます

テストパラメータ = 10

変更されているのに。

どうすればこの問題を解決できますか? ToString()リストボックス項目はParameterItemのメソッドを再度呼び出して更新する必要があると思いますが、どうすればよいですか?

または、リストボックスにキーと値のペアを追加するより良い方法はありますか?

4

2 に答える 2

2

選択したアイテムを削除して再度挿入することで、アイテムを変更できます。

// If we already have the parameter set then edit it.
if (lstbxSetParameters.Items.Contains(currentParameter))
{
    var newItem = new ParameterItem((lstbxSetParameters.SelectedItem as ParameterItem).Name, currentParameter.Value);
    var index = lstbxSetParameters.SelectedIndex;
    lstbxSetParameters.Items.RemoveAt(index);
    lstbxSetParameters.Items.Insert(index, newItem);
    lstbxSetParameters.SelectedIndex = index;
}
于 2012-08-20T01:52:44.963 に答える
0

私の解決策:

string[] nList = new string[lb.Items.Count];
nList = lb.Items.OfType<string>().ToArray();
nList[lb.SelectedIndex] = newValue;
lb.Items.Clear();
lb.Items.AddRange(nList);

このようにして、選択したアイテムを変更する代わりに (多くの問題があります)、配列内のアイテムを変更してリストボックスをリロードしました。

于 2013-12-31T17:16:58.913 に答える