Windows Forms - передача данных и повторное использование определенной формы - PullRequest
2 голосов
/ 24 октября 2019

У меня есть простое приложение с 2 формами. Одна форма (form1) позволяет пользователю выбрать запись в ListBox. После того как выбор сделан, вторая форма (form2) должна быть обновлена ​​данными из первой формы.

Пользователь должен иметь возможность выбрать другую запись, и вторая форма должна быть обновлена ​​с новыми данными.

Я смог сделать это, за исключением того, что он использует Form.Show (), который воссоздает form2 каждый раз, когда пользователь выбирает новую запись в form1. Я хочу, чтобы форма 2 отображалась (когда-то открывалась), а затем обновляла отображаемые данные каждый раз, когда пользователь выбирает запись в форме 1.

Соответствующий код формы 1:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim newForm As New form2
    newForm.Location = Screen.AllScreens(LBound(Screen.AllScreens)).Bounds.Location
    newForm.Hide()

End Sub

Private Sub DataGridView1_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles BoatsGrid.CellMouseClick
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
        Dim selectedRow = gridview1.Rows(e.RowIndex)
        TextBox1.Text = gridview1.CurrentRow.Cells(1).Value.ToString()
        Textbox2.Text = gridview1.CurrentRow.Cells(2).Value.ToString()
        Textbox3.Text = gridview1.CurrentRow.Cells(0).Value.ToString()

        Dim newForm As New form2

        newForm.Location = Screen.AllScreens(LBound(Screen.AllScreens)).Bounds.Location

        newForm.UpdateText(TextBox1.Text, Textbox2.Text)
        newForm.Show()

    End If
End Sub

Теперь,соответствующий код из form2:

Public Class WeightDisplay
    Private Sub WeightDisplay_Load() Handles MyBase.Load

    End Sub

    Public Sub UpdateText(TextString1 As String, TextString2 As String)

        Label1.Text = TextString1 
        Label2.Text = TextString2

    End Sub
End Class

Я попытался использовать form2.Refresh () и form2.Update () из form2 и из form1. Я ничего не получаю.

То, что я показываю выше, просто создает больше версий формы 2, но не обновляет текущую итерацию формы 2.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы должны объявить Form2 на уровне модуля в Form1 и создать его экземпляр один раз .

Public Class Form1

    Private _form2 As New Form2 = Nothing

    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        _form2 = New Form2

    End Sub

End Class

Теперь вы вызываете метод обновления для _form2 в обработчике событий DataGridView:

_form2.UpdateText(TextBox1.Text, Textbox2.Text)
0 голосов
/ 24 октября 2019

Вам необходимо сохранить ссылку на form2, чтобы вы могли обновить ее, иначе вы не сможете обновить форму.

Dim newForm As New form2
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    newForm.Location = Screen.AllScreens(LBound(Screen.AllScreens)).Bounds.Location
    newForm.Hide()

End Sub
Private Sub DataGridView1_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles BoatsGrid.CellMouseClick
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
        Dim selectedRow = gridview1.Rows(e.RowIndex)
        TextBox1.Text = gridview1.CurrentRow.Cells(1).Value.ToString()
        Textbox2.Text = gridview1.CurrentRow.Cells(2).Value.ToString()
        Textbox3.Text = gridview1.CurrentRow.Cells(0).Value.ToString()

        newForm.Location = Screen.AllScreens(LBound(Screen.AllScreens)).Bounds.Location

        newForm.UpdateText(TextBox1.Text, Textbox2.Text)
        newForm.BringToFront()

    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...