【问题标题】:Data doesn't display when working with multiple forms使用多个表单时不显示数据
【发布时间】:2014-11-20 16:27:50
【问题描述】:

我是 VB.NET 的新手,整个下午都在为一些事情苦苦挣扎。我在论坛上发现了类似的问题,但似乎没有一个能准确地描述我的问题。我很确定我遗漏了一些非常基本的东西。

我制作了一个主窗体,它目前只有一个按钮,目的是打开第二个窗体并关闭主窗体。根据用户将在第二个表单中选择的设置,第一个表单可能必须进行调整以匹配新设置。但问题发生在此之前。

“设置”表单有 15 个文本框,我在开发模式下将它们绘制到表单上。它们被称为 ID1、ID2、..、ID15。我想在那里显示的值保存在一个数组中:

Dim ids(15) as integer

接下来,我创建了一个模块来模拟我在 VB6 中使用的控件数组。

Public sources() As TextBox = [frmSettings.ID1, frmSettings.ID2, //and so on

我这样做是为了能够遍历所有 15 个文本框:

For i = 0 To 14
   Sources(i).Text = ids(i + 1)
Next

然后我在主窗体上将此代码添加到 Button1_Click() 事件中:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    frmSettings.Show()
    Me.Close()
End Sub

我为 frmSettings 表单上的“退出”按钮做了同样的事情。 这似乎有效,但只有一次。我启动应用程序,按下按钮,弹出 frmSettings 并在文本框中显示数组中的所有值。当我按下“关闭”按钮时,我返回主页。

到目前为止一切顺利,但如果我再次尝试返回frmSettings,所有文本框都保持空白,就好像我添加到表单中的代码永远不会执行一样。

任何帮助将不胜感激!

【问题讨论】:

  • 设置表单上的代码是如何执行的?是在表单的加载事件中吗?

标签: vb.net


【解决方案1】:

首先,确保保存数据的数组对两种形式都可以访问:

Module Module1

    Public ids(15) As Integer

End Module

应该以任何一种形式声明“ids”。

接下来,让 frmSettings 自己负责加载和保存数据:

Public Class frmSettings

    Private Sub frmSettings_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim matches() As Control
        For i As Integer = 0 To 14
            matches = Me.Controls.Find("ID" & (i + 1), True)
            If matches.Length > 0 AndAlso TypeOf matches(0) Is TextBox Then
                Dim TB As TextBox = DirectCast(matches(0), TextBox)
                TB.Text = ids(i)
            End If
        Next
    End Sub

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        Dim valid As Boolean = True
        Dim matches() As Control
        For i As Integer = 0 To 14
            matches = Me.Controls.Find("ID" & (i + 1), True)
            If matches.Length > 0 AndAlso TypeOf matches(0) Is TextBox Then
                Dim TB As TextBox = DirectCast(matches(0), TextBox)
                Dim value As Integer
                If Integer.TryParse(TB.Text, value) Then
                    ids(i) = value
                Else
                    MessageBox.Show(TB.Name & ": " & TB.Text, "Invalid Value", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    valid = False
                End If
            End If
        Next
        If valid Then
            Me.Close()
        End If
    End Sub

End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多