簡體   English   中英

vb.net在表單之間傳遞文本框。

[英]vb.net Pass Textbox Between forms.

我有兩種形式。 在Form1上,我想在加載時將文本框值傳遞給Form 2。 我認為這是可行的。 將加載並運行Form1,並在form1中填充數據。 我在form1中公開了文本框的屬性。 然后,我嘗試在form2中使用該公開屬性。

Public Class form1

Public ReadOnly Property GetTextBox() As String
    Get
        Return txtbox1.Value
    End Get
End Property

在form2上

 Dim X As form1
 Me.TextBox1.Text = X.GetTextBox

VB允許您通過類的類名引用表單實例 ,因此您可以使用:

Me.TextBox1.Text = Form1.GetTextBox

但是,您不應該依賴於此,而應該將Form1的顯式實例傳遞給Form2 ,例如在構造函數中:

' Form2
Public Sub New(ByVal f As Form1)
    Me.New()

    ' save 'f' for future reference
End Sub

有幾種方法可以給這只貓蒙皮。

最簡單的方法是為Form2創建第二個(或替換現有的)構造函數,該構造函數接受string作為參數。 然后,當Form1創建Form2您可以以這種方式傳遞參數。

Public Class Form2
    Sub New(ByVal txt As String)
        InitializeComponent()
        Me.TextBox1.Text = txt
End Sub
End Class

然后在Form1您將得到類似Dim f2 As Form2 = New Form2(myTextBox.Text)

坦白地說,其他方式基本上與此相同,除了您可以將Textbox本身作為參數傳遞給構造函數,甚至可以將Form1傳遞給Dim X As Form1 = theForm構造函數。 一般而言,如果您僅需要Textbox.Text那么您僅應在構造函數中接受string 如果您不需要全部控件或表單,則沒有理由公開!

您當前的代碼非常接近,但是正如Plutonix所評論的那樣, Form2X屬性只是Form1 另一個實例,而不是應用程序正在顯示的實際實例。

執行此操作時:

Dim X As form1

您將創建對form1引用。 (大概在某個地方實例化它?或者可能依賴於VB中使用“默認”表單實例的功能 。...不這樣做。請相信我,不要。)此實例與已經存在的實例。 您正在尋找的是對已經存在的實例的引用。

如果form2有一個依賴form1 ,需要對實例的引用form1則需要在構造為參考form2

Private Property Form1Instance As form1

Sub New(ByVal form1Instance As form1)
    Me.Form1Instance = form1Instance
End Sub

創建form2實例時,請提供對form1實例的引用:

Dim form2Instance As New form2(Me)
form2Instance.Show()

然后在form2您可以引用該form1現有實例:

Dim someVariable As String = Me.Form1Instance.GetTextBox()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM