Использование ListBox для хранения нескольких частей данных - PullRequest
3 голосов
/ 13 февраля 2012

Я делаю программу списка задач, используя формы Windows для одного из моих университетских заданий.Я узнал, как добавлять и удалять элементы из списка, поэтому я понимаю его основную сущность, но я хочу добавить задачу в список, например: «получить еду на ужин» идобавьте это в список, но затем я хочу иметь возможность щелкнуть «получить еду на ужин», а затем добавить еще один список, чтобы добавить такие вещи, как «булочки» и «бекон» в следующем представлении, которое будет связано с предыдущим элементом,Как древовидная структура, но я хотел, чтобы она была более ориентированной на меню.Как я собираюсь сделать это, что я должен искать?

Примечание: не стесняйтесь исправлять мой заголовок, если он плохо описывает то, что я делаю, я подумал, что это лучше, чем "использование Listbox"

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012

Описание

  1. Создайте базовый класс для записей списка Todo.
  2. Переопределите метод ToString().
  3. Заполните ваш список со списком вашего класса.

Если пользователь нажимает на элемент, вы можете захватить выбранный элемент, привести его к своему классу и использовать свойства, чтобы что-то сделать.

Пример

public class MyTodoListEntry
{
    public string Title { get; set; }
    public DateTime DueDate { get; set; }
    public List<string> Information { get; set; }

    public MyTodoListEntry()
    {
        this.Information = new List<string>();
    }

    public override string ToString()
    {
        return this.Title;
    }
}

Добавить запись в список задач

MyTodoListEntry entry = new MyTodoListEntry();
entry.Title = "get food for dinner";
entry.Information.Add("bread rolls");
entry.Information.Add("bacond");
entry.DueDate = new DateTime(2012,12,12);
myListBox.Items.Add(entry);

Сделайте что-нибудь после того, как пользователь нажмет на элемент

private void myListBox_Click(object sender, EventArgs e)
{
    if (myListBox.SelectedItem == null)
        return;

    // get selected TodoList Entrie
    MyTodoListEntry selectedEntry = (MyTodoListEntry)myListBox.SelectedItem;
    // do something, for example populate another ListBox with selectedEntry
    myInformationsListBox.Items.Clear();
    myInformationsListBox.Items.AddRange(selectedEntry.Information.ToArray());
}

Снимок экрана

enter image description here

2 голосов
/ 13 февраля 2012

Элементы ListBox не обязательно должны быть строками, они могут быть любыми объектами, которые могут быть выражены как String через ToString.

Например:

public class ToDoItem
{

   public ToDoItem(string w)
   {
       What = s;
   }

   public override string ToString()
   {
       return What;
   }

   public string What
   {
        get;
        set;
   }

}

myListBox.Items.Add(new ToDoItem("Feed Budgie"));

ToDoItem item = (ToDoItem)myListBox.Items[0];

Если продолжить это, вы можете затеместь:

public class ToDoItem
{
    ...
    public ToDoItem[] Children
    {
       get;
       set;
    }
    ...
}

Очень грубо, но я надеюсь, вы понимаете, о чем я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...