Я знаю, что исключение нулевой ссылки обычно возникает при доступе к элементу в коллекции, которая не существует. Тем не менее, в этом случае бросается, несмотря на то, что я явно создаю этот элемент для простых строк заранее. Я вычистить свой код и не может найти источник этой ошибки (код очень простой ATM, как я только начал процесс реструктуризации решение, сделанное для клиентаNull Reference Exception on Dictionary
Справочная информация:.
фоторабот является пользовательский класс, который содержит все свойства конкретного производственного задания
это все, проведенных в
Public Dictionary(of string, PhotoJob)
, который проводится в классе MainForm.- A («темп») photojob создается в го это словарь для обработки добавления новых заданий по мере добавления данных (это, по-видимому, является источником ошибки.
Код:
Private Sub AddJob_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MainForm.photoJobs.Add("temp", New PhotoJob())
pctBox.AllowDrop = True
End Sub
Public Sub pctbox_drop(sender As Object, e As DragEventArgs) Handles pctBox.DragDrop
Dim pics As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) 'Gets the data from the file drop
If MainForm.photoJobs("temp").imageList.Count = 0 Then
MainForm.photoJobs("temp").imageList = pics.ToList 'Gets the data from the file drop
Else
For i = 0 To MainForm.photoJobs("temp").imageList.Count - 1
If Not MainForm.photoJobs("temp").imageList.Contains(pics(i)) Then
MainForm.photoJobs("temp").imageList.Add(pics(i))
End If
Next
End If
MainForm.photoJobs("temp").photoID = CType(formatID(MainForm.photoJobs("temp").imageList(0)), String)
txtPhotoID.Text = MainForm.photoJobs("temp").photoID
Select Case MainForm.photoJobs("temp").imageList.Count
Case 0
MsgBox("Please ensure that you are dropping image files")
Case 1
lblImageNumber.Text = txtPhotoID.Text
checkBoxes(0)
Case 2
txtPhotoID.Text = txtPhotoID.Text & "(2)"
lblImageNumber.Text = txtPhotoID.Text
checkBoxes(1)
Case 3
txtPhotoID.Text = txtPhotoID.Text & "(3)"
lblImageNumber.Text = txtPhotoID.Text
checkBoxes(2)
Case 4
txtPhotoID.Text = txtPhotoID.Text & "(4)"
lblImageNumber.Text = txtPhotoID.Text
checkBoxes(3)
End Select
spinCounter.Value = 1
spinCounter.Minimum = 1
spinCounter.Maximum = MainForm.photoJobs("temp").imageList.Count
pctBox.ImageLocation = MainForm.photoJobs("temp").imageList(0)
End Sub
Ошибка вызывается на If MainForm.photoJobs("temp").imageList.Count = 0 Then
линии.
На второй, второстепенной ноте, довольно типично для клиентов просить «еще одну маленькую вещь», которая приводит к тому, что вам необходимо провести капитальный ремонт приложения или мне просто не повезло? (слегка риторический)
Возможно, 'imageList' имеет значение null, используйте отладчик, он сообщает вам все, что вам нужно знать. –
'imagelist' звучит так, будто это не компонент формы ImageList, а квалифицированная коллекция. В этом случае единственной причиной может быть то, что 'photoJobs (« temp »)' Nothing. Отладчик легко поможет вам найти его. SideNote: 'MainForm' выглядит как ссылка на форму по умолчанию, укусит вас рано или поздно со многими приложениями. – Plutonix
Почти все исключения NullReference имеют один и тот же набор причин. Для получения справки см. [Исключение NullReference в Visual Basic] (http://stackoverflow.com/a/26761773/1070452). – Plutonix