Как использовать форму в классе как новую форму в VB. NET? - PullRequest
0 голосов
/ 19 марта 2020

Когда я использую Ceghozzadas.DataGridCeg.DataSource = ... он работает нормально, но как новая форма - нет. Любая помощь, пожалуйста? :)

Public Class CegHozzadas
 Private Sub CegHozzadas_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim DataGridFill As New DataGrid
        DataGridFill.DataGridFill()
  End Sub
End Class

Public Class DataGrid
     Public Sub DataGridFill()
         Dim thisform As New CegHozzadas
         thisform.DataGridCeg.DataSource = ...
    end sub
end class

1 Ответ

0 голосов
/ 19 марта 2020

Подумайте о потоке вашего кода.

У вас есть класс CegHozzadas, который я назову в качестве примера "Форма A". Форма А загружается, создавая новый DataGrid и вызывая на нем DataGridFill().

Когда вы звоните DataGridFill(), она создает совершенно новый CegHozzadas, который НЕ является та же форма, что и для формы A. Затем вы пытаетесь установить для источника данных new DataGridCeg значение ... что-то.

Вы видите проблему здесь? Вы создали две формы, и, по-видимому, хотите изменить только источник данных DataGridCeg в форме A. Вы не видите изменения источника данных, поскольку вы изменяете источник данных элемента управления в совершенно другой форме. Эта совершенно другая форма даже не отображается на экране, она просто существует в фоновом режиме.

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

Public Class CegHozzadas
    Public Sub New()
        DataGridCeg.DataSource = ...
    End Sub
End Class

Если вы абсолютно должны go с помощью метода DataGridFill() класса DataGrid, то Вы можете передать свою форму в качестве аргумента DataGridFill(), но я настоятельно рекомендую против этого. Вам не нужно оставлять код для CegHozzadas для привязки данных здесь.

Public Class CegHozzadas
    Private Sub CegHozzadas_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim DataGridFill As New DataGrid
        DataGridFill.DataGridFill(Me)
    End Sub
End Class

Public Class DataGrid
     Public Sub DataGridFill(MyForm As CegHozzadas)
         MyForm.DataGridCeg.DataSource = ...
    End Sub
End Class
...