对象引用未设置为对象的实例

时间:2011-02-14 10:11:59

标签: c# .net

当我在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);
                }
            }
        }
    }
}

3 个答案:

答案 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的非空实例?

这里的一个问题是,我们必须假设cleaveconstrspan是您“表单”中的字段,并且它们具有正确的类型定义,并且它们对于运行代码的线程是可访问的和有效的。

修改

了解更多您的意见。如果表单上使用的任何数据是由未在与GUI相同的线程上运行的代码推送而不是由表单类检索的,那么您需要在表单上定义一个代码可以被该代码使用更新数据。通过使用“表单类”.Invoke(委托函数)类型功能。