2011-03-27 110 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基本上,通過將它們所在的表單的名稱後跟一個引用其他表單中的變量。然後變量名稱