Как вы можете использовать ListView, чтобы показать пользователю коллекцию объектов и управлять этими объектами?
В качестве аргумента, вот наша цель дизайна: у нас есть объект «монстр», и этот «монстр» будет иметь несколько «способностей». Пользователь взаимодействует с полномочиями через элемент ListView.
Сначала мы создаем объект Power. Дайте объекту следующий метод:
public ListViewItem makeKey()
{
return new ListViewItem(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.
Хорошо, у нас есть ListViewItems в ListView! Теперь, как мы с ними взаимодействуем? Сделайте кнопку, а затем функцию примерно так:
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.");
}
}
Вот и все. Надеюсь, вы нашли это полезным. Я не уверен, было ли это намеренным аспектом их дизайна, но ListViews и словари так удивительно хорошо сочетаются друг с другом, когда вы используете ListViewItem в качестве ключа, что это радость!
Я подумал, что это полезный совет, и мне было предложено опубликовать свой вопрос и ответить на него, если я хочу поделиться советом. Я напечатал ответ заранее и вставил его после того, как отправил вопрос.
Серьезно ... вы почти одновременно отправили ответ на свой вопрос.