将ListView与对象集合相关联

时间:2020-03-06 14:24:43  来源:igfitidea点击:

我们如何使用ListView向用户显示对象集合并管理这些对象?

解决方案

出于争论的目的,这是我们的设计目标:我们有一个"怪物"对象,并且该"怪物"将具有多个"力量"。用户通过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是ListView的地方,我们要添加ListViewItems。

好了,所以我们在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和Dictionary可以很好地融合在一起,这是一件很高兴的事情!