Member 12561559 Ответов: 1

Как мне получить доступ к свойству из диалоговой формы, прежде чем он становится замкнутым, VB.NET приложения WinForms


Привет,
Надеюсь, что все вы здоровы и устраиваетесь в 2018 году :)

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

Form1 создает новый экземпляр Form2 и показывает его как showdialog - я не могу получить доступ к объявлению списка из Form2 в Form1.

Я не могу иметь глобальных деклараций или переменных - объяснено далее, ниже.

Что я уже пробовал:

У меня есть две формы, обе созданы в конструкторе.
Form1 создает новый экземпляр/копию формы 2 с помощью

Dim NewForm As New Form2
                NewForm.ShowDialog()


Я использую showdialog, но я счастлив использовать просто show, но это дает мне новый набор проблем, который заключается в том, чтобы узнать из Form2, что вызывающая форма, то есть создание нового экземпляра/копии Form2, была закрыта.

Проект будет содержать еще много форм, например Form3, Form4, Form5....Form20, все они создают новую копию Form2 и должны получить доступ к "этой копии списка(строки)" из Form2, поэтому глобальное объявление списка(строки) невозможно.

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

В форме 2 у меня есть некоторые данные, которые я храню в
List(Of String)


В форме 2 я объявил в верхней части класса:

Dim _Keywords As New List(Of String)

   Friend ReadOnly Property Keywords() As List(Of String)
       Get
           Return _Keywords
       End Get

   End Property



Мне нужно получить доступ (из формы 1,3,4,5,6....20) список(строки) на Form2 до того, как он будет удален/закрыт/установлен в ничто, а не раньше.

На данный момент я делаю это в форме 1 после showdialog:

 Dim Kwords As List(Of String) = GlobalFind.Keywords
NewFrm.Dispose
NewFrm=Nothing



в форме 1 Список Kwords всегда пуст, я получаю count=0, когда смотрю. Надеюсь, что это имеет смысл, и спасибо вам за то, что вы уделили мне свое время (и, надеюсь, решение, которое я упустил из виду).

1 Ответов

Рейтинг:
5

Graeme_Grant

Выставьте свойство на Form2, а затем получите результаты в Form1:

Форма 2

Public Class Form2

    Private mResults As List(Of String)
    Public Property Results() As List(Of String)
        Get
            Return mResults
        End Get
        Set(ByVal value As List(Of String))
            mResults = value
        End Set
    End Property

    Private Sub butSave_Click(sender As Object, e As EventArgs) Handles butSave.Click

        ' set results here
        Results = New List(Of String) From {"111", "222", "333"}

        Close()

    End Sub

End Class


Форма 1
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim NewForm As New Form2
        NewForm.ShowDialog()

        Dim results As List(Of String) = NewForm.Results

    End Sub

End Class


Maciej Los

5ed!