2015-11-23 4 views
-1

Я получаю исключение ссылки Null при попытке добавить элемент в список в другой форме.VB Добавление элемента в список в другой форме, дающей нулевое исключение ссылки

Это моя ошибка во время выполнения.

Необработанное исключение типа «System.NullReferenceException» произошло в ... Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.

Я пытаюсь подключить Mainform, инициализируя его в верхней части класса второй формы. после того, как у меня есть данные, я хочу добавить его в список, основной формой.

Public Class FormHairdresser //The second form 
    Dim varMainForm As FormMain //connecting the forms ? 

Private Sub btnAddHairdresser_Click(sender As Object, e As EventArgs) Handles btnAddHairdresser.Click 

hairdresser = HairdresserChoices(HairdresserID) // get the data 
    varMainForm.lstListBox.Items.Add(hairdresser) //Run time error breaks here. 

мне очень нужна помощь в этом я не уступка делать в 8 утра: s

ответ

1

Все, что я должен был написать название формы вместо ininalised переменной.

FormMain.lstListbox.Items.Add("item")

Вместо

Dim varMainForm As FormMain varMainForm.ListBox.Items.Add("item")

0

Проблема с вашим инициализации formmain.with из собственно инициализации объекта вы создаете что иное, Null. Чтобы избежать этого, мы используем оператор New. Новый оператор часто можно использовать для создания экземпляра при его объявлении. Таким образом, инициализация будет выглядеть

Dim varMainForm As New FormMain 

Надежда это Helps.For более Ссылочная Object Initialization Errors

обновление:

Dim varMainForm As FormMain //connecting the forms ? 

Private Sub btnAddHairdresser_Click(sender As Object, e As EventArgs) Handles      btnAddHairdresser.Click 

hairdresser = HairdresserChoices(HairdresserID) // get the data 
    varMainForm = New FormMain 
    varMainForm.lstListBox.Items.Add(hairdresser) //Run time error breaks here. 
+0

С новым я получаю StackOverflow ошибка – DigitalDulphin

+0

Не врезаться в настоящее время, но это не добавляет ничего к ListBox – DigitalDulphin

+0

сделать одну вещь добавить ListBox как 'Public Shared 'Member.. then try..Reference http://vbcity.com/forums/t/6364.aspx –

0

Попробуйте это.

Public Class FormHairdresser //The second form 

     Private Sub btnAddHairdresser_Click(sender As Object, e As EventArgs) Handles btnAddHairdresser.Click 

     Dim varMainForm As FormMain 
     hairdresser = HairdresserChoices(HairdresserID) 
     varMainForm.lstListBox.Items.Add(hairdresser) 
+0

Я получаю ошибку времени компиляции, говоря, что «varMainForm» используется до того, как ему присвоено значение. Исключительное исключение ссылки может появиться во время выполнения "под" varMainForm ".listListBox.Items.Add (парикмахер) – DigitalDulphin

+0

какой тип переменной является вашим парикмахером? Это список? –

0

Вы не можете просто создать новый экземпляр вашей основной формы (как было предложено, и ожидать, что на работу, вам нужна фактическая ссылка на MainForm, которые были созданы, чтобы помочь вам увидеть логику участвующей.

Создайте новый проект Winforms. В стандартном Form1 добавьте текстовое поле и кнопку. Теперь добавьте новую форму в это приложение (вы можете оставить ее с именем по умолчанию для формы 2. В эту форму добавьте TextBox (вызов это myTextBox) и кнопку.

Теперь вернитесь к первой форме и дважды нажмите кнопку для доступа к cl ick обработчик в коде. Добавьте следующее:

Нажмите f5 и нажмите кнопку, и вы увидите новую форму 2. Пока все хорошо.

Теперь откройте код для Form2 и добавьте следующий код, чтобы он заканчивает тем, как это:

Public Class Form2 

    Private frm As Form1 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     frm.TextBox1.Text = myTextBox.text 
    End Sub 

End Class 

сборки, нажмите f5 и нажмите кнопку на Form1, в новом form2 ввести текст в текстовом поле и нажмите кнопку, вы получите свое нулевое ссылочное исключение. Причина, по которой вы это понимаете, состоит в том, что в настоящее время частное поле frm inForm2 ссылается на Nothing.

Теперь откройте код в Form2 и добавить конструктор и следующий код так, чтобы он заканчивает тем, как это:

Public Class Form2 



     Private frm As Form1 
     Public Sub New(byval frm1 As Form1) 
      'first we should make sure that we have a parameter to play with 
      If Not IsNothing(frm1) Then 
       frm = DirectCast(frm1,Form1) 
      End If 
     End Sub 



     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
      frm.TextBox1.Text = myTextBox.text 
     End Sub 

    End Class 

Наконец вернуться к своей первой форме ButtonClick обработчика и изменить код немного так что это выглядит так;

Dim frm as New Form2(Me) 

frm.Show 

Построить и запустить приложение, теперь при вводе текста в текстовое поле в form2 и нажмите на кнопку появится в текстовом поле в Form1.

Причина, по которой это происходит, состоит в том, что вы передали фактическую ссылку на форму1, которая была первоначально создана, когда приложение начало формировать2. Путем литья этой ссылки на ваше частное поле, используемое для представления form1 в form2, вы можете использовать его для правильного обращения к вещам в форме1. Это очень простая концепция, но которую вы должны изучить, прежде чем вы будете делать программирование прогресса.