#arrays #vb.net
#массивы #vb.net
Вопрос:
Я в основном пытаюсь создать массив для экспорта отмеченных элементов в документ word. Но я получаю сообщение об ошибке
«Ссылка на объект не установлена для экземпляра объекта».
и
«Ссылка на ‘SelectedMutualFunds’ имеет значение ‘Ничего’
Ниже приведен мой код:
Public Class ExportFunds
Public SelectedMutualFunds() As String
Private Sub ExportFundOkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportFundOkButton.Click
Dim i As Integer
Dim array_Counter As Integer
array_Counter = 0
For i = 0 To ExportFundCheckedListBox.Items.Count() - 1
If ExportFundCheckedListBox.GetItemCheckState(i) = CheckState.Checked Then
SelectedMutualFunds(array_Counter) = ExportFundCheckedListBox.Items(i).ToString
array_Counter = 1
End If
Next
Me.Close()
End Sub
Может кто-нибудь, пожалуйста, помочь мне решить эту проблему?
Комментарии:
1. там нет никаких доказательств того, что
SelectedMutualFunds
когда-либо создавался экземпляр, вы только объявили его. Используйте список (из строк), и вам не придется беспокоиться о размере массива.2. Я объявил список (из строки), но теперь он говорит, что строка не может быть преобразована в список (из строки)
3.
SelectedMutualFundsList.Add(ExportFundCheckedListBox.Items(i))
Ответ №1:
Вам необходимо указать длину вашего массива строк
Public SelectedMutualFunds() As String
к следующему в ExportFundOkButton_Click перед использованием, предпочтительно непосредственно перед циклом for .
Redim SelectedMutualFunds(ExportFundCheckedListBox.Items.Count() - 1)
Комментарии:
1. Добавляю ли я этот код в button_click или заменяю одну из строк, которая уже была написана в button_click ?
2. Поскольку изначально вы не указали какую-либо длину массива строк, вам необходимо добавить строку redim в существующий код button_click.
Ответ №2:
Вы можете свести это к однострочному и одновременно исправить исключение NullReference:
Private Sub ExportFundOkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportFundOkButton.Click
SelectedMutualFunds = ExportFundCheckedListBox.Items.Where(Function(i) i.CheckState = CheckState.Checked).Select(Function(i) i.ToString()).ToArray()
Me.Close()
End Sub
Или, немного длиннее, но легче для чтения:
Private Sub ExportFundOkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExportFundOkButton.Click
SelectedMutualFunds = ExportFundCheckedListBox.Items.
Where(Function(i) i.CheckState = CheckState.Checked).
Select(Function(i) i.ToString()).
ToArray()
Me.Close()
End Sub