C # вызов класса для списка дел - PullRequest
1 голос
/ 03 января 2012

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

Мне удалось добавить данные в мой список дел, и мой код будет успешно удален из списка дел и помещен в список "Готово" нажатием кнопки.

Мой код не работает, когда я помещаю его в новый класс.

Вот код нового класса:

public class ToDo : Form1

    {
        public void Remove()
        {

            for (int i = 0; i <= (lstToDo.SelectedItems.Count - 1); i++)
            {

                lstDone.Items.Add(lstToDo.SelectedItems[i]);
                lstToDo.Items.Remove(lstToDo.SelectedItems[i]);

            }
        }
    }

и вот код из Form1, с которого, я думаю, я пытаюсь позвонить, когда нажимаю на кнопку:

public void btnRemoveToDo_Click(object sender, EventArgs e)
        {

            ToDo todo = new ToDo();
            todo.Remove();
        }

Любая помощь?

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Прежде чем вы переместили его в новый класс, я представляю, что ваш метод выглядел следующим образом ...

public void btnRemoveToDo_Click(object sender, EventArgs e)
{
    this.Remove();
}

Когда вы переместили его в новый класс, вы изменили этот код на ...

ToDo todo = new ToDo();
todo.Remove();

Это создает новый экземпляр класса.Чтобы это работало, вы должны использовать существующий экземпляр;this вот так ...

ToDO todo = (ToDo) this;
todo.Remove();

Хотя это не совсем оптимально, потому что это очень неловкая архитектура.Лучше оставлять методы, которые используют компоненты формы, на самом классе формы.Если вы хотите, чтобы методы обрабатывали данные, извлеките значения из компонентов формы, а затем используйте данные в качестве параметров для методов различных классов.Это скорее комментарий к общей архитектуре программного обеспечения, но он не очень важен для вашей конкретной проблемы.

РЕДАКТИРОВАТЬ
Приведение экземпляра формы (this) в виде ToDoэкземпляр не будет работать, потому что Form1 не наследуется от ToDo, как прокомментировано.

Вам лучше переместить метод Remove() обратно в класс Form1 на данный момент.Мое предложение было бы попытаться узнать немного больше об объектах и ​​объектно-ориентированном программировании (ООП), прежде чем пытаться разбить что-то еще на разные классы.метод класса ToDo принимает в качестве параметров все, что ему нужно.

public void Remove(ListControl todoList, ListControl doneList)
{
    for (int i = 0; i <= (todoList.SelectedItems.Count - 1); i++)
    {
        doneList.Items.Add(todoList.SelectedItems[i]);
        todoList.Items.Remove(todoList.SelectedItems[i]);
    }
}

Тогда вам придется сделать так, чтобы ваш другой метод выглядел следующим образом ...

public void btnRemoveToDo_Click(object sender, EventArgs e)
{
    ToDo toDo = new ToDo();
    toDo.Remove(lstToDo, lstDone);
}
2 голосов
/ 03 января 2012

вы создаете новый экземпляр класса ToDo, который не переносит выбранные вами предметы из вашего исходного Form1. Я подозреваю, что на линии:

        for (int i = 0; i <= (lstToDo.SelectedItems.Count - 1); i++)

lstToDo.SelectedItems, вероятно, пусто.

Не видя весь ваш код, трудно дать хорошие предложения, но класс ToDo, вероятно, не нуждается в расширении Form1. Класс ToDo должен содержать все ваши внутренние задачи и отслеживать, какие из них выполнены, а Form1 должен иметь 1 экземпляр ToDo, который он использует для отображения данных.

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