2008-09-19 2 views

ответ

7

В целях аргумента, вот наша цель дизайна: у нас есть объект «монстр», и что «монстр» будет иметь несколько «полномочий». Пользователь взаимодействует с полномочиями через элемент 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 и Dictionaries сочетаются так удивительно хорошо, когда вы используете ListViewItem как ключ к радости!

+1

Серьезно ... вы уже почти столько ответили на свой вопрос. – Josh 2008-09-19 04:34:38

Смежные вопросы