在VB.NET中跨表单共享变量的最佳实践

时间:2011-03-27 18:30:25

标签: vb.net

我需要在VB.NET中以两种形式共享变量。其中一个是主要形式,另一个是儿童形式。

我一直在寻找,我找到了一些方法。我想用最好的方法来做到这一点。我在下面列出了几个选项。请评论哪一个是最佳选择:

  1. 在其中一个表单中创建静态/共享变量,并通过以下方式访问其他表单:

    Form1 frm = new Form1(); // Creating object of parent to access shared variable
    frm.a = "abc"; // Passing value
    
  2. 在创建子表单时,将主表单的实例发送到子表单。然后可以通过属性函数访问变量。

  3. 在模块中创建全局变量。这似乎是最简单的选择,但我怀疑这是最好的选择。

  4. 我还阅读了有关委托和事件的内容,但我不知道如何实现这一点。

  5. 如果还有其他方法我没有提及,请与我分享。

6 个答案:

答案 0 :(得分:2)

这个问题没有一个答案。您列出的所有方法都应该“有效”。你应该使用哪个取决于你想要共享变量的原因。例如:

  1. 假设您有一个包含记录列表的表单,并且用户双击一条记录,因此您要打开一个新表单来编辑该记录,并且您想要传递记录ID。在这种情况下,我会将构造函数方法添加到第二个表单: Sub New(RecordID as String)     '添加代码以在此处加载记录 End Sub

  2. 假设您的应用程序中的某些表单可能想知道数据库路径或其他全局类似的东西。为此,我将父表单上的适当变量放入一个Public变量(称为Field)并将其作为MainForm.FieldName访问。 (免责声明:纯粹主义者会说你不应该依赖于VB.NET自动实例化表单类的实例并允许你通过表单名称引用它的某种混乱的事实,而你应该得到一个指向实际的指针表单的实例并将其存储在您的子表单中并访问父表单。实际上,这就像您的帖子中的数字“2”。但如果您不介意程序错误,则实际上并不是必需的。)

  3. 假设你的应用程序中有一些全局内容,例如应用程序启动的时间,所以你可以告诉用户“你已经使用该应用程序5个小时,去寻求生活!”这些东西可以存储在一个模块中。 (或者在应用程序类中,但这是非常隐藏的)

答案 1 :(得分:1)

将您的全局变量存储在Module1.vb文件中,必须公开声明它们可以从所有表单访问:

Public X as String
Public Y as Integer

然后就像使用任何页面上的任何其他变量一样使用它们:

X = "Hello"
Y = 10

Textbox1.Text = X
Textbox2.Text = Y

这不是最安全的做法,因此不应该用于所有变量。但它非常简洁。

答案 2 :(得分:1)

创建两个表单。添加3个单选按钮和1个按钮到form1。向form2添加标签。在form1类型的代码中

    Public rdb As Integer = 1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     Form2.Show()
If RadioButton1.Checked Then
            rdb = 1
        ElseIf RadioButton2.Checked Then
            rdb = 2
        ElseIf RadioButton3.Checked Then
            rdb = 3
        End If
End Sub

然后在form2的代码中

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label1.Text = Form1.rdb
    End Sub

答案 3 :(得分:0)

子表单可以具有私有变量的公共get和set函数,父表单可以在其更改及其结束时设置它,或者在它使用它之前获取它以查看它是否在子表单中更改。

答案 4 :(得分:0)

您可以向任一表单添加公共属性。他们可以互相访问这些属性。 (虽然这不是共享的,但在大多数情况下并不是静态的。)

答案 5 :(得分:0)

不确定这是否回答了问题,但我发现有用的一件事是在form2中将form1中的变量称为Form1.variablename,并在Form1中引用Form2中的变量并在Form1中使用Form2.variablename时引用form1中的变量基本上,通过将其所在的表单的名称放在其后,引用其他形式的变量。然后是变量名称