Текстовое поле не показывает текст - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть форма (назовем ее 1), которая открывает новую форму (2), где вы можете выбрать клиента из таблицы данных. Когда пользователь нажимает «Принять» в форме (2), я создаю объект и передаю его в форму (1). Это код кнопки подтверждения в форме (2):

Private objCreateOrder As FCreateOrder = New FCreateOrder

Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
     If selectedRow Is Nothing Then
         MessageBox.Show("Error.")      
     Else
         Me.Close()
         objCreateOrder.getClientObject(objClient)
     End If
End Sub

Это функция из формы (1), которая была вызвана выше:

Public Sub getClientObject(client As CClient)
     Dim objClient As CClient = New CClient
     objClient = client
     txtClient.Text = objClient._name.ToString + " " + objClient._surname.ToString
End Sub

Когда я отлаживаю, я вижу что объект был передан правильно, и что текстовое поле содержит именно те строки, которые ему нужны. Кроме того, если я добавлю что-то вроде MessageBox.Show (), чтобы показать что-либо, чтобы просто проверить, выполняет ли код то, что находится внутри метода, который он работает, , но в текстовом поле ничего не отображается . Чего мне не хватает?

1 Ответ

0 голосов
/ 08 апреля 2020

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

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

....
Dim formClient as FClientSelection = new FClientSelection(Me)
formClient.ShowDialog()
...

Экземпляр Me передается в конструктор FClientSelection, и вы можете сохранить его в локальной переменной

Dim currentOrder as FCreateOrder
Public Sub FClientSelect(fOrder As FCreateOrder)
    currentOrder = fOrder
End Sub

, наконец, вы используете currentOrder для вызова метода, исправляющего текст клиента

Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
     If selectedRow Is Nothing Then
         MessageBox.Show("Error.")      
     Else
         Me.Close()
         currentOrder.getClientObject(objClient)
     End If
End Sub

Сказал, что я хочу, чтобы вы рассмотрели, как эти два класса форм неразрывно связаны. Это не хороший дизайн. Лучше использовать свойство publi c внутри formClient и установить это свойство внутри формы перед ее закрытием. Ваша форма вызова может прочитать это свойство и выполнить его работу.

...