2

ListView を使用して、ユーザーにオブジェクトのコレクションを表示し、それらのオブジェクトを管理するにはどうすればよいでしょうか?

4

1 に答える 1

7

議論の目的のために、ここに私たちの設計目標があります。「怪物」オブジェクトがあり、その「怪物」にはいくつかの「力」があります。ユーザーは、ListView アイテムを介して権限を操作します。

まず、Power オブジェクトを作成します。オブジェクトに次のメソッドを与えます。

public ListViewItem makeKey()
{
    return new ListViewItem(name);
}

name はパワーの名前で、文字列です。この ListViewItem はキーとして機能し、後でこの力を識別して取得できるようにします。

次に、これらすべてのパワーを追跡するために、Monster オブジェクトのどこかに追加する必要があります。

public Dictionary<ListViewItem,Power> powers;

そのため、モンスターにパワーを追加する方法が必要です。

public void addPower(Power newPower) {
    ListViewItem key = newPower.makeKey();
    monster.powers.add(key, newPower);
}

よし、ほぼ完成!これで、モンスターの力に関連付けられた ListViewItems の辞書ができました。その辞書からキーを取得して、ListView に貼り付けるだけです。

foreach (ListViewItem key in powers.Keys)
    powerList.Items.Add(key);

powerList は、ListViewItems を追加する ListView です。

よし、ListView に ListViewItems を取得しました。では、それらとどのようにやり取りするのでしょうか。ボタンを作成してから、次のような関数を作成します。

private void powerRemoveButton_Click(object sender, EventArgs e)
{
    if (powerList.SelectedIndices.Count > 0)
    {
        int n = powerList.SelectedIndices[0];
        ListViewItem key = powerList.Items[n];
        monster.powers.Remove(key);
        powerList.Items.Remove(key);
    }
    else
    {
        MessageBox.Show("No power selected.");
    }
}

そして、それはそれです。これがお役に立てば幸いです。これが彼らの設計の意図的な側面であったかどうかはわかりませんが、ListViewItem をキーとして使用すると、ListViews と Dictionaries が驚くほどうまく調和し、喜びを感じます!

于 2008-09-19T04:32:03.400 に答える