我被要求编写一个单独的类来做某事,所以我想我会为一个待办事项列表做这件事(使用文本框将数据输入到列表中,然后为完成的任务创建另一个列表,使用按钮进行传输之间)。

我已经能够将数据添加到待办事项列表中,并且通过单击按钮,我的代码将成功从待办事项列表中删除并放置在“完成”列表中。

当我将其放在新类中时,我的代码不起作用。

这是新类的代码:

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();
        }


有什么帮助吗?

最佳答案

在您将其移至新类之前,我想您的方法看起来像...

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


当您将其移至新类时,将代码更改为...

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


那就是创建一个新的类实例。要使其工作,您将不得不使用现有实例。 this像这样...

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


但这并不是真正的最佳选择,因为它是一个非常笨拙的体系结构。您最好在表单类本身上保留使用表单组件的方法。如果要使用方法来处理数据,请从Form的组件中提取值,然后将数据用作不同类的方法的参数。但这更多是对通用软件体系结构的评论,对您的特定问题并不是很重要。

编辑
将Form实例(this)强制转换为ToDo实例将不起作用,因为Form1不会从ToDo继承。

您最好暂时将Remove()方法移回Form1类。我的建议是,在尝试将其他任何东西分解为不同的类之前,尝试学习一些有关对象和面向对象编程(OOP)的知识。

您可以尝试的另一件事是使Remove()类上的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);
}

关于c# - C#调用类以获取待办事项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8716877/

10-10 13:02