首页 > 解决方案 > 在树视图的两个表单之间传递信息

问题描述

我有一个子程序,它带来了第二个表单,上面有一个从数组填充的树视图。我想单击数组上的一个项目并将密钥和文本传递回子并关闭第二个表单。

我觉得这应该很容易,但我无法弄清楚。该数组按如下方式传递给树视图。

    For j = 0 To NoFlowsheets - 1
        Form2.TreeView1.Nodes.Add("Flowsheet" & CStr(j), ColumnNames(j, 0))
        For k = 0 To j_max - 1
            If ColumnNames(j, k) <> "NAME_EMPTY DO_NOT_USE_THIS_NAME" Then
                Form2.TreeView1.Nodes(j).Nodes.Add("Flowsheet" & CStr(j), ColumnNames(j, k))
            End If
        Next k
    Next j
    Form2.ShowDialog()

在此之后,会弹出一个带有树视图的表单。我希望用户单击树视图中的一项并将其传递回子

标签: vb.netvisual-studio

解决方案


这是一个非常基本的示例,但它展示了如何将某些内容传递到表单中,以及如何取回用户选择/输入的内容。您可以轻松地修改它以传入您的数组,并传回选定的值。

在第一个表单(打开子表单的位置)上,添加如下代码:

Public Class frmStart

    Private Sub btnAskUser_Click(sender As Object, e As EventArgs) Handles btnAskUser.Click
        Dim frmAskUserAboutThemselves As New frmQuestion(19, "John Doe")
        frmAskUserAboutThemselves.ShowDialog(Me)
        If frmAskUserAboutThemselves.WasRecordSaved = True Then
            lblStatus.Text = "Name: " & frmAskUserAboutThemselves.ValueThatUserSelectedOnTheFormName & vbCrLf & "Age: " & frmAskUserAboutThemselves.ValueThatUserSelectedOnTheFormAge
        Else
            lblStatus.Text = "The user did not enter/select any values."
        End If
        frmAskUserAboutThemselves.Dispose()
        Beep()
    End Sub

End Class

在子表单(您要求用户选择某些内容)上,您添加如下代码:

Public Class frmQuestion

#Region " Override Windows Form Designer Generated Code "

    Public Sub New(Optional ByVal iAge As Integer = 0, Optional ByVal sName As String = "")
        MyBase.New()

        m_iPassedInPersonAge = iAge
        m_sPassedInPersonName = sName

        'This call is required by the Windows Form Designer.
        InitializeComponent()
        'Add any initialization after the InitializeComponent() call
    End Sub

#End Region

#Region " Form Level Variables "

    Private m_iPassedInPersonAge As Integer = 0
    Private m_sPassedInPersonName As String = ""
    Private m_bWasRecordSaved As Boolean = False

#End Region

#Region " Form Level Functions "

    Public ReadOnly Property WasRecordSaved() As Boolean
        Get
            Return m_bWasRecordSaved
        End Get
    End Property

    Public ReadOnly Property ValueThatUserSelectedOnTheFormName() As String
        Get
            Return m_sPassedInPersonName
        End Get
    End Property

    Public ReadOnly Property ValueThatUserSelectedOnTheFormAge() As Integer
        Get
            Return m_iPassedInPersonAge
        End Get
    End Property

#End Region

#Region " Normal Page Code "

    Private Sub frmQuestion_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        txtName.Text = m_sPassedInPersonName
        NumericUpDownAge.Value = m_iPassedInPersonAge
    End Sub

    Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
        m_bWasRecordSaved = False
        Me.Close()
    End Sub

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        m_iPassedInPersonAge = NumericUpDownAge.Value
        m_sPassedInPersonName = txtName.Text.Trim
        m_bWasRecordSaved = True
        Me.Close()
    End Sub

#End Region

End Class

如果您不确定我在每个表单上放置了哪些控件,请询问,但应该很容易弄清楚。


推荐阅读