2009-04-12 56 views
3

我自教VB.Net。VB.NET:什麼是從第二種形式檢索值的最佳方法?

這是我最近碰到的一個問題。假設我的應用程序中有一個主Form1。 Form1調用第二個LoginForm(這個名字暗示)是一個帶有用戶名/密碼類型字段的登錄窗口。預期的行爲是LoginForm將捕獲登錄詳細信息並將它們傳回給Form1。

這樣做的最好方法是什麼?

在我看來,我正在考慮像'doLogin'這樣的函數調用,它會'顯示'LoginForm,捕獲輸入的數據,處理表單並返回登錄細節(可能以某種形式豆)。不知何故,我不認爲這是可能的

我目前有什麼不那麼優雅。 LoginForm以Form1模式顯示(即showDialog); '我'引用被傳遞給第二個窗口。在LoginForm上收到用戶輸入後,我在Form1上設置一個值,然後處理。

這是人人都這樣做的方式嗎?

回答

1

我總是將一個委託傳遞給第二個表單,該表單可以被調用以將第二個表單中的值「傳回」到第一個表單中。

這樣你就避免了任何緊密的耦合。

經典觀察者模式。


示例實現如下:

添加委託簽名到Form1。在Form1的按鈕單擊事件處理程序中,實例化Form2類和Form1的委託。指定窗體2的函數委託,並調用委託:

'Form1.vb 
Public Delegate Sub delPassData(ByVal text As TextBox) 

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click 
    Dim frm As Form2 = New Form2 
    Dim del As delPassData = New delPassData(AddressOf frm.funData) 
    del(Me.textBox1) 
    frm.Show() 
End Sub 

在窗體2,添加到該委託將指向功能。該功能將textBox1的文本分配給label1。

'Form2.vb 
Public Sub funData(ByVal text As TextBox) 
    label1.Text = text.Text 
End Sub 

將數據傳回Form1上,只是讓funData返回所需的值的函數。

+0

注意用代碼示例說明嗎?爲偉大的文章選擇了 – Cerebrus 2009-04-12 12:19:25

0

可以在VB.NET使用「My.Forms」

下發生的文本從一個文本框在還檢索數據LoginForm並將其放在主窗體的文本框中。

Me.RetrievedDataTextBox.Text = My.Forms.LoginForm.Textbox1.Text 
相關問題