#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(), но она показывает ошибку как «ссылка на не являющийся общим членом требует ссылки на объект».