2014-01-14 60 views
0

我有一個從vb6遷移到vb.net的應用程序。將文本框文本從表單中傳遞到模塊

我想在模塊的SearchFields中訪問textbox1的文本。

我不想將它作爲參數傳遞,因爲我有太多的控件要通過。

請提供一些示例。

我的代碼是frmNew頁有Textbox1的

Private Sub Ok_Click(.....) 
    call SearchFields() 
    Me.Close() 
End Sub 

內部模塊下面我有

Sub SearchFields() 
    Dim str As string 
    Dim frm As New frmNew 
    str = frm.Textbox1.Text 
End Sub 
方法

frmNew.Textbox1.Text越來越沒有

+1

請先提供一些代碼。 – Neolisk

+0

已添加評論 – user3180163

+2

'Dim frm As New frmNew' does not refer the existing form。您必須將參考作爲參數傳遞。轉移到.Net將需要您重新考慮您的程序的結構。一般來說,模塊應該替換爲類。絕大多數情況下避免使用全局變量。 – LarsTech

回答

1

要做到儘量少重新編碼儘可能,您可以將您的兩種方法更改爲以下內容。爲此,Textbox1必須標記爲公共。我個人不得不將VB6應用程序「遷移」到.Net,正如@LarsTech指出的那樣,這需要重新思考你的應用程序,而不僅僅是語法上的改變。

Private Sub Ok_Click(.....) 
    call SearchFields(Me) 
    Me.Close() 
End Sub 

Sub SearchFields(Form frm) 
    Dim str As string 

    str = frm.Textbox1.Text 
End Sub 
+0

謝謝AWinkle ...現在我得到正確的價值。但是我面對SearchFields()方法的一件事是從幾種形式中調用的,所以我應該從那裏傳遞什麼參數。否則,我必須制定一個完整的新方法。 – user3180163

+0

如果TextBox並不總是被命名爲Textbox1,我會建議將參數從Form更改爲TextBox,並直接傳遞正確的Textbox控件。如果它總是被命名爲Textbox1,那麼您總是可以傳遞Me(Me是對當前對象的引用),並且SearchFields方法將始終具有正確的實例。如果您想要最大限度的重用性和可持續性,請重構該方法以創建TextBox。 – AWinkle

0

您可以傳遞對控件的引用以用於搜索文本。這使得您的SearchFields方法更通用。作爲一個例子,我創建了一個名爲frmNew的表單和一個名爲Searching的模塊。在窗體上,我放置了一個名爲Ok的按鈕,一個TextBox和一個ComboBox。

Public Class frmNew 

    Private Sub Ok_Click(sender As Object, e As EventArgs) Handles Ok.Click 
     Searching.SearchFields(TextBox1) 
     Searching.SearchFields(ComboBox1) 
     Me.Close() 

    End Sub 

End Class 

有兩種方法,你可以去處理傳遞給模塊的控制(我命名爲Searching)。首先,你可以檢查控件的類型,並基於該採取行動:

Module Searching 

    Sub SearchFields(textSource As Control) 
     Dim str As String = "" 

     ' just for invesigating, show the type of the control. 
     Console.WriteLine(TypeName(textSource)) 

     If TypeOf textSource Is System.Windows.Forms.TextBox Then 
      str = textSource.Text 

     ElseIf TypeOf textSource Is System.Windows.Forms.ComboBox Then 
      Dim src = DirectCast(textSource, ComboBox) 
      If src.SelectedIndex >= 0 Then 
       str = src.SelectedItem.ToString() 
      Else 
       ' nothing was selected. Do whatever is appropriate. 
       str = "NOTHING SELECTED!" 
      End If 

     End If 

     'TODO: the searching code. 
     Console.WriteLine(str) 

    End Sub 

End Module 

或者,你可以採取的方法重載,它運行的對應參數的方法版本的優勢(S)你通過它:

Module Searching 

    Sub SearchFields(src As TextBox) 
     DoSearch(src.Text) 
    End Sub 

    Sub SearchFields(src As ComboBox) 
     'TODO: check an item is selected. 
     Dim txt = src.SelectedItem.ToString() 
     DoSearch(txt) 
    End Sub 

    Private Sub DoSearch(s As String) 
     ' do the search 
     Console.WriteLine(s) 
    End Sub 

End Module 
相關問題