我希望你能帮助一个程序员。基本上,我希望将富文本框(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);
我知道该列表尚未初始化,但如果不允许我使用用户输入初始化它,如何初始化它...
任何你可以解决的问题都会非常有用
亲切的问候,
基兰
答案 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的列表,如另一个用户所指出的那样。