我被要求编写一个单独的类来做某事,所以我想我会为一个待办事项列表做这件事(使用文本框将数据输入到列表中,然后为完成的任务创建另一个列表,使用按钮进行传输之间)。
我已经能够将数据添加到待办事项列表中,并且通过单击按钮,我的代码将成功从待办事项列表中删除并放置在“完成”列表中。
当我将其放在新类中时,我的代码不起作用。
这是新类的代码:
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/