当我在for循环下使用类对象cleave
时,会出现错误'对象引用未设置为对象的实例'
private void dateTimePickertodate_ValueChanged(object sender, EventArgs e)
{
if (dateTimePickertodate.Value <=dateTimePickerfromdate.Value)
{
MessageBox.Show("Choose Correct date");
textBoxnumofdays.Clear();
}
else
{
cleave = new LeaveApplication(constr);
span = dateTimePickertodate.Value - dateTimePickerfromdate.Value;
Getdays();
if (Mode == 1)
{
textBoxnumofdays.Text = Convert.ToString(span.Days + 2);
}
else
{
textBoxnumofdays.Text = Convert.ToString(span.Days + 1);
}
for (int i = 0; i < daysofweek.Count; i++)
{
if (Mode == 1)
{
textBoxnumofdays.Text = Convert.ToString(span.Days + 2);
if (daysofweek[i].Equals(cleave.WeekDays[i]))
{
textBoxnumofdays.Text = Convert.ToString(span.Days - 1);
}
}
else
{
textBoxnumofdays.Text = Convert.ToString(span.Days + 1);
if (daysofweek[i].Equals(cleave.WeekDays[i]))
{
textBoxnumofdays.Text = Convert.ToString(span.Days - 1);
}
}
}
}
}
答案 0 :(得分:2)
当iam使用类对象时,在for循环下面切换
你没有显示 for
循环以下的任何内容,并且cleave
未在方法中声明 - 因此我们推断它是一个字段。因此,我们可以假设两件事之一:
cleave
从未分配new LeaveApplication(constr);
dateTimePickertodate_ValueChanged
从未被调用过 - 所以再次cleave
尚未分配答案 1 :(得分:1)
您确定在WeekDays
构造函数中初始化了LeaveApplication
数组吗?如果没有,它会在你的陈述中抛出NullReferenceException
:
if (daysofweek[i].Equals(cleave.WeekDays[i]))
答案 2 :(得分:0)
简单地说,在您希望使用它时,尚未创建cleave
的实例。
您是否检查过它是否为空且是否已创建cleave
的非空实例?
这里的一个问题是,我们必须假设cleave
,constr
和span
是您“表单”中的字段,并且它们具有正确的类型定义,并且它们对于运行代码的线程是可访问的和有效的。
修改的
了解更多您的意见。如果表单上使用的任何数据是由未在与GUI相同的线程上运行的代码推送而不是由表单类检索的,那么您需要在表单上定义一个代码可以被该代码使用更新数据。通过使用“表单类”.Invoke(委托函数)类型功能。