Значения не отображаются в текущей активной форме

#vb.net #visual-studio

#vb.net #visual-studio

Вопрос:

Использование VB.Net (Приложение для Windows)

У меня есть одна основная форма (форма ввода данных), я создаю много форм во время выполнения.

Код для создания множественной формы во время выполнения.

Кнопка 1 щелчок

 If IsNothing(frm) OrElse frm.IsDisposed Then
            newfrm = New frmEntry
    End If
newfrm.Show()
  

У меня есть всплывающие окна для выбора значения в форме ввода данных.

Код для выбора значения из всплывающих окон

Код всплывающего окна

 If e.KeyCode = Keys.Enter Then
 frmEntry.txtbox1.Text = gridview1.Rows(crRow).Cells("code").Value.ToString().Trim()          
End If
  

Приведенный выше код всплывающего окна работает для формы ввода данных, но он не работает для новых форм (во время выполнения)

Когда я выбираю значение из всплывающих окон, оно отображается в текстовом поле frmentry, а не в текстовом поле newfrm.

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

Что не так в моем коде.

Необходимо VB.Net Справка по коду

Ответ №1:

Если форма, из которой вы открываете всплывающее окно, — это то, что вам нужно для изменения значений, рассматривали ли вы возможность передачи ссылки на открывающуюся форму во всплывающее окно при его открытии? Чтобы у вас был прямой доступ к форме, в которой есть элементы управления, которые необходимо обновить?

Этот конструктор во всплывающем окне:

 Private mOpeningForm As frmEntry
Public Sub New(OpeningForm As frmEntry)

    InitializeComponent()

    mOpeningForm = OpeningForm
End Sub
  

Это изменено, чтобы использовать ссылку на форму, отправленную во всплывающую форму:

 If e.KeyCode = Keys.Enter Then
 mOpeningForm.txtbox1.Text = gridview1.Rows(crRow).Cells("code").Value.ToString().Trim()          
End If
  

Это в форме, когда окно создается во время выполнения:

 If IsNothing(mEntryForm) OrElse mEntryForm.IsDisposed Then
            mEntryForm= New frmEntry(me)
    End If
mEntryForm.Show()
  

На верхнем уровне класса формы данных (тот, который создает всплывающие окна)

 private mEntryForm as frmEntry
  

Это позволит вам иметь ссылку на экземпляр frmEntry из любого места в классе формы данных. (Обратите внимание, что я также изменил имя экземпляра всплывающей формы для кода события нажатия кнопки)

Комментарии:

1. Это приводит к возникновению исключения NullReferenceException. Причина, по которой OP использовал frmEntry.

2. Наверное, я подумал, что экземпляр созданной им формы все еще находится в области видимости. Конечно, если бы это было не так, это сгенерировало бы нулевую ссылку… Я думал, что он упустил из виду, что он использовал имя типа вместо имени формы.

3. Оказывается, что код находится в другой форме, он оставил комментарий к моему ответу.

4. Обновлено на основе комментариев. Надеюсь, сейчас я на правильном пути и лучше понимаю проблему.

5. @D. Ваш код работает, но я не могу ссылаться на всплывающие окна в форме ввода. Например, имя формы Popwindows как «frmlist». В форме ввода я нажал кнопку, подобную этой frmlist.show(), но она показывает ошибку как «ссылка на не являющийся общим членом требует ссылки на объект».