如何使用包含公共变量的类将项添加到C#中的列表

时间:2015-03-23 17:51:46

标签: c# winforms forms list

我希望你能帮助一个程序员。基本上,我希望将富文本框(taskNameRTB)中的用户输入分配到我的班级taskName;中的taskStructure字符串变量,该变量位于form1中,如下所示:

public partial class Form1 : Form
{
    public class taskStructure
    {
        public string taskName;
        public string taskDescription;
        public int Priority;
        public string dateAndTime;
    }

    public List<taskStructure> TasksArray = new List<taskStructure>(); //Declared a list data structure

在我的第二个表单中,用户输入与任务相关的所有内容,我想在单击“创建任务”按钮后将此信息发送到列表:

 private void createTaskBtn_Click(object sender, EventArgs e)
    {
        Form1 welcomeForm = new Form1();
        welcomeForm.TasksArray[0].taskName = taskNameRTB.Text;
        welcomeForm.TasksArray[0].taskDescription = taskDescRTB.Text;
    }

然而,当我这样做时,我得到一个ArgumentOutOfRangeException,我不明白为什么。我也试过这些:

        welcomeForm.TasksArray[0].Add(taskDescRTB.Text);
        welcomeForm.TasksArray.Insert(0, taskNameRTB.Text);
        welcomeForm.TasksArray.Add(taskDescRTB.Text);
        taskNameRTB.Text = welcomeForm.TasksArray[0].taskName;

但是运行的错误会出现同样的错误ArgumentOutOfRangeException,其中一些错误不起作用,例如:

welcomeForm.TasksArray[0].Add(taskDescRTB.Text);

我知道该列表尚未初始化,但如果不允许我使用用户输入初始化它,如何初始化它...

任何你可以解决的问题都会非常有用

亲切的问候,

基兰

3 个答案:

答案 0 :(得分:2)

您需要在列表中添加新的taskStructrue

welcomeForm.TasksArray.Add(new taskStructure 
    {
        taskName = taskDescRTB.Text,
        taskDescription = taskDescRTB.Text
    });

但是我个人会重写该类以遵循命名约定并使用属性而不是公共字段。

public class TaskStructure
{
    public string TaskName { get; set; }
    public string TaskDescription { get; set; }
    public int Priority { get; set; }
    public string DateAndTime { get; set; }
}

答案 1 :(得分:1)

你试过吗

welcomeForm.TasksArray.Add(new taskStructure(taskDescRTB.Text));

我不知道taskStructure是什么,但你需要填写TasksArray的类型。

答案 2 :(得分:1)

您的TaskStructure是一个类,您将所有TaskStructure对象放入列表中,

public List<taskStructure> TasksArray = new List<taskStructure>(); //Declared a list data structure

你的Form1()是否有一个调用InitializeComponents()的构造函数?

如果是这样,您可以尝试在InitializeComponents()下方添加TasksArray = new List<taskStructure>() ,因为您似乎正在尝试访问没有的列表数据结构已经用新的初始化。

<强>替代地

正如另一位用户所说,你可以像这样为TaskStructure创建一个构造函数类:

public TaskStructure(RTB rtb1, rtb2, rtb3) //where RTB is the rich text box type
{
   taskName = rtb1.text;
   taskDescription = rtb2.text;
   //and so on.
}

然后你可以做TaskArray.add(新的TaskStruture(rtb1,rtb2,rtb3)。

Thrid Edit

刚刚意识到你的TaskArray实际上是一个List,在C#(和Java)中,你不能使用像TaskArray [0]这样的索引访问它,你必须使用getter和setter方法,在这种情况下是TaskArray.add()和TaskArray.get(0),您正在获取ArgumentOutOfRangeException,因为您尝试使用这样的方形索引来访问List - &gt; [0]。 您可以实际访问列表1的列表,如另一个用户所指出的那样。

Here's a good tutorial on C# lists, by DotNetPerls