【问题标题】:Using Variables Across Forms - VB跨表单使用变量 - VB
【发布时间】:2012-08-28 13:12:02
【问题描述】:

我有一个相当简单的问题(我认为)关于使用 Visual Basic 在表单之间传递变量。

我有一个包含 2 个表单(Form1 和 Form2)的程序。 Form1 有 3 个单选按钮,用户必须选择其中一个然后加载 Form2。

现在我已经做到了,如果选择radiobutton1,公共变量“radio_select”将等于“radiobutton1”,如果选择radiobutton2,“radio_select”将等于“radiobutton2”。

但每当我尝试以第二种形式调用“radio_select”时,它就会出现空白。为什么会这样?我该如何解决它。

我尝试过使用if form1.radiobutton1.checked = true,但我一直得到第一个单选按钮,无论我选择了哪个单选按钮。

我认为表单正在被卸载,或者那里存在问题,因为一旦初始化,似乎没有任何变量被传递给第二个表单。另请注意,调用第二个表单时,第一个表单会隐藏Me.Hide()

【问题讨论】:

    标签: vb.net radio-button global-variables


    【解决方案1】:

    您是否考虑过轻微的重新设计,即在 Form2 上创建一个名为 RadioSelect 的属性,然后在显示 Form2 之前从 Form1 设置它:

    Class Form2
        Public Property RadioSelect As String
        ...
    End Class
    
    ...
    
    Dim f2 as new Form2()
    f2.RadioSelect = "radiobutton2"
    
    f2.Show() ' Or f2.ShowDialog()
    

    这可以让您远离不必要的公共变量,并且还应该确保 Form2 可以从 Form1 或任何调用它的人那里看到它需要什么。

    编辑: 以下对我有用:

    Public Class Form1
        Public Test As String
    
        Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
            Test = "I'm Here"
            Me.Hide()
            Form2.ShowDialog()
        End Sub
    End Class
    
    Public Class Form2
        Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Text = Form1.Test
        End Sub
    End Class
    

    【讨论】:

    • 嗨大卫,你的建议似乎是合理的,但我不想每次我需要在表单之间传递一个新变量时都创建类。没有更简单的方法可以做到这一点吗?为什么不只使用Public VariableName As String 就足够了?为什么它不保留它的价值?
    • 公共变量在哪里声明?
    • 在 Form1 中。然后我使用 Form1.VariableName 来访问它
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多