2013-05-11 61 views
1

我對vb.net相當陌生,並希望能夠從另一個開放表單訪問值(如文本框中的.text)。在我的應用程序中,我從主窗體打開窗體,當我嘗試訪問主窗體上的控件中的文本時,我無法看到控件上的.text值。Vb.Net - 在另一種形式的控件中訪問文本

我可以遍歷主窗體上的所有控件,但是當我想查看實際值時,所有控件都是空的。我的控件(如文本框和組合框)位於選項卡控件和組框中。

有沒有辦法讓打開的表單上的所有.text或值可以從其他打開的表單中獲得?

這是我如何通過主窗體上的控件循環。

Try 

    For Each Tp As TabPage In UserData.UserTabControl.TabPages 

    'Name of Tabcontrol is UserTabcontrol 

     For Each gbx As GroupBox In Tp.Controls 


      For Each ctrl As Control In gbx.Controls 

        If ctrl.Name = "UserName" Then 
         MsgBox(UserData.UserName.Text) 'Messagebox here is empty 
        End If 

      Next ctrl 

     Next gbx 


    Next Tp 


    Me.Close() 

Catch ex As Exception 
    MsgBox(ex.Message) 
End Try 

在此先感謝。 Chris

+0

你能告訴我們如何通過主窗體上的控件循環的代碼示例嗎?我懷疑(假設你的主窗體被稱爲'MyMainForm'),你正在循環'MyMainForm.Controls',但我想首先看到:) – Adrian 2013-05-11 22:10:02

回答

1

從您給出的示例中,您已獲得對Control的引用。而不是回到Form並試圖訪問該控件作爲Form的屬性,您可以直接投射您的參考並直接調用其屬性Text

If ctrl.Name = "UserName" Then 
    MsgBox(DirectCast(ctrl, TextBox).Text) 'Assuming your UserName control is a TextBox 
End If 
+0

Adrian,我試過了。 .text仍然是空的。只是嘗試不同的事情,我在循環控件之前添加了userdata.show,雖然它再次打開表單,但它也顯示了msgbox中的值。我想知道如何在不打開主窗體兩次的情況下實現這一點。 – 2013-05-12 00:25:41

+0

好的,如果您在嘗試從表單獲取值之前調用過'UserData.Close()',那麼您將失敗,因爲它不再被檢索。你需要用'UserData.ShowDialog()'來顯示你的表單,以便關閉它作爲對話意味着它不會立即消失,或者使用'UserData.Hide()'而不是'UserData.Close() ' – Adrian 2013-05-12 01:46:30

+0

謝謝阿德里安的幫助,我試了一下羅恩的代碼,它做我需要的。 – 2013-05-12 02:36:55

1

如果你想引用一個打開的窗體上的控件,把它叫做Form1中: 加上一個Form1的屬性或變量調用形式:

Public Class Form2 
    Public Property f1 As Form1 

    ... 
    Private Sub DoSomething() 
     MsgBox("Here's some text from Form1: " & f1.Textbox1.Text) 
    End Sub 
End Class 

在被叫形式,設置Form2屬性添加到表單對象:

Public Class Form1 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Form2.f1 = Me 
     Form2.ShowDialog() ' or Form2.Show() 
    End Sub 
End Class 

然後,您可以使用f1屬性引用Form2中的所有Form1對象。

+0

謝謝羅恩!這很好。 – 2013-05-12 02:15:58

+0

很高興幫助。由於您對SO有點新穎,所以我應該指出,如果問題得到滿意的回答,您(和響應者)點擊接受按鈕是有益的。您將獲得2分並提高您的接受比例。它還會提醒其他人,時間可能會轉移到一個尚未被接受的問題上。 – 2013-05-13 00:29:04

相關問題