Мне нужна помощь с моей программой. Я получаю эту ошибку, когда запускаю свою программу VB.NET с помощью настраиваемого DayView control.«Ссылка на объект не установлена в экземпляр объекта» При добавлении в список
************** Текст исключения ************** System.NullReferenceException: Ссылка на объект не указывает на экземпляр объект. at SeaCow.Main.DayView1_ResolveAppointments (Object sender, ResolveAppointmentsEventArgs args) в C: \ Users \ Daniel \ Мои программы \ Visual Basic \ SeaCow \ SeaCow \ SeaCow \ Main.vb: строка 120 в Calendar.DayView.OnResolveAppointments (ResolveAppointmentsEventArgs args) в Calendar.DayView.OnPaint (PaintEventArgs е) в System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs е, Int16 слой) в System.Windows.Forms.Control.WmPaint (Message & м) в системе. Windows.Forms.Control.WndProc (Сообщение & м) на System.Windows.Forms.NativeWindow.Callback (IntPtr HWND, Int32 тзд, IntPtr WPARAM, IntPtr LPARAM)
В соответствии с кодом ошибки цикл «для каждого» ниже вызывает ошибку NullReferenceException. По умолчанию список «назначений» ничем не назначен, и я не могу найти, где вызывается функция ResolveAppointments.
Private Sub DayView1_ResolveAppointments(ByVal sender As Object, ByVal args As Calendar.ResolveAppointmentsEventArgs) Handles DayView1.ResolveAppointments
Dim m_Apps As New List(Of Calendar.Appointment)
For Each m_App As Calendar.Appointment In appointments
If (m_App.StartDate >= args.StartDate) AndAlso (m_App.StartDate <= args.EndDate) Then
m_Apps.Add(m_App)
End If
Next
args.Appointments = m_Apps
End Sub
Вот это OnResolveAppointments и ResolveAppointment функции из файла управления DayView.cs.
public event EventHandler<ResolveAppointmentsEventArgs> OnResolveAppointments;
protected virtual void ResolveAppointments(ResolveAppointmentsEventArgs args)
{
System.Diagnostics.Debug.WriteLine("Resolve app");
if (OnResolveAppointments != null)
OnResolveAppointments(this, args);
this.allDayEventsHeaderHeight = 0;
// cache resolved appointments in hashtable by days.
cachedAppointments.Clear();
if ((selectedAppointmentIsNew) && (selectedAppointment != null))
{
if ((selectedAppointment.StartDate > args.StartDate) && (selectedAppointment.StartDate < args.EndDate))
{
args.Appointments.Add(selectedAppointment);
}
}
foreach (Appointment appointment in args.Appointments)
{
int key = -1;
AppointmentList list;
if (appointment.StartDate.Day == appointment.EndDate.Day && appointment.AllDayEvent == false)
{
key = appointment.StartDate.Day;
}
else
{
key = -1;
}
list = (AppointmentList)cachedAppointments[key];
if (list == null)
{
list = new AppointmentList();
cachedAppointments[key] = list;
}
list.Add(appointment);
}
}
Кроме того, здесь OnPaint метод
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
// resolve appointments on visible date range.
ResolveAppointmentsEventArgs args = new ResolveAppointmentsEventArgs(this.StartDate, this.StartDate.AddDays(daysToShow));
ResolveAppointments(args);
using (SolidBrush backBrush = new SolidBrush(renderer.BackColor))
e.Graphics.FillRectangle(backBrush, this.ClientRectangle);
// Visible Rectangle
Rectangle rectangle = new Rectangle(0, 0, this.Width - VScrollBarWith, this.Height);
DrawDays(ref e, rectangle);
DrawHourLabels(ref e, rectangle);
DrawDayHeaders(ref e, rectangle);
}
Кто-нибудь есть какие-либо предложения?
Что такое переменные с именами, начинающимися с 'm_'? Для меня это соглашение, обычно используемое для указания полей-членов (а не локальных переменных); это выглядит так странно для меня! –
Почти все случаи «NullReferenceException» одинаковы. См. «[Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)» для некоторых советов. –