2011-03-27 54 views
2

我需要在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. 我也读了一些关于代表和事件的内容,但我不知道如何实现这一点。

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

+2

只有#2是合理的。 – 2011-03-27 19:20:30

回答

1

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

  1. 假设你有一个记录列表形式,用户双击一个记录,所以要打开一个新的形式来编辑记录,您想通过记录ID。在这种情况下,我想补充一个构造方法为第二形态: 子新(的recordId作为字符串) “添加代码,加载在这里记录 结束小组

  2. 说,一些在你的应用程序可能需要将形式知道数据库路径或其他类似的东西。为此,我将父窗体上的相应变量放入一个Public变量(称为Field)并将其作为MainForm.FieldName进行访问。 (免责声明:纯粹主义者会说你不应该依赖VB.NET自动实例化表单类的一个实例并让你通过表单名引用它,而应该获得一个指向实际的指针形式的实例,并将其存储在您的孩子形式访问一样,父窗体。其实,这就像数字“2”在您的文章。但是,如果你不介意的程序化不正确它实际上并不是必需的。)

  3. 说有东西在全球您的应用程序,如应用程序启动的时间,这样你就可以告诉用户“您已经使用的应用程序5小时,去获得生活!”这些东西可以存储在一个模块中。(或者在应用程序类但那是相当隐藏)

+0

我只想指出一些关于#2的真正重要的东西。我遇到了一种情况,我通过FormName.checkbox在主窗体中引用了一个复选框,但我正在做一个后台工作。这是非常糟糕的,因为如你所说,它实例化了一个窗体的实例)。如果系统设置被更改或系统被锁定,在non-gui线程中实例化GUI会导致挂起问题。 – 2016-02-01 15:04:36

0

子窗体可以有公共的get和私有变量设置功能,当它改变它使用它,看它是否符合儿童的形式发生了变化之前父窗体可以设置它和它的结束,或者把它。

0

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

1

Store中的Module1.vb文件的全局变量,必须将它们公开宣称要访问的所有形式:

Public X as String 
Public Y as Integer 

然后,只需使用它们,就像任何页面上的任何其他变量:

X = "Hello" 
Y = 10 

Textbox1.Text = X 
Textbox2.Text = Y 

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

1

创建两种形式。将3个单选按钮和1个按钮添加到form1。向form2添加一个标签。在窗口2的代码为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 

然后代码

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

不知道这个答案,但有一点,我发现有用的是指变量在Form1,同时在窗口2编程为Form1.variablename,并在Form1中引用Form2中的变量以在Form1中使用Form2.variablename基本上,通过将它们所在的表单的名称后跟一个引用其他表单中的变量。然后变量名称