2016-12-27 26 views
1

我有幾個命名文本框包含我希望保存在文件中的值。我以前從另一個模塊引用的文本框這樣WPF引用來自另一個模塊,類或窗口的文本框文本

owrite.Writeline(form1.textbox1.text) 

使用WPF我無法弄清楚如何做到這一點是能夠做到這一點在winform。我可以當我嘗試從不同的模塊使用此代碼

owrite.Writeline(me.textbox1.text) 

的MainWindow.xaml.vb內做到這一點,但我不能暴露(查找)文本框。我可以在MainWindow中做到這一點,這是事實,但我也想知道如何。編輯: 謝謝你的幫助。根據下面的一些建議,我已經使用以下內容來創建我的設置文檔,它基本上可以從程序中的任何模塊寫入。正如我說不是編寫WPF和獨立的UI線程和數據,但爲它做什麼,它適合我的目的的正確方法:(文本被命名爲文本框)

Dim mainWin = Application.Current.Windows.OfType(Of MainWindow).FirstOrDefault() 

      Using oWrite As New System.IO.StreamWriter(AppPath & "\SETTINGS\User Config.txt", False) 
       oWrite.WriteLine(mainWin.Text_ServerName.Text) 
       oWrite.WriteLine(mainWin.Text_DBName.Text) 
       oWrite.WriteLine(mainWin.Text_ServerUserName.Text) 
       oWrite.WriteLine(mainWin.Text_ServerPass.Text) 
       oWrite.WriteLine(mainWin.Text_StorageDriveLetter.Text) 
       oWrite.Close() 
      End Using 
+0

「嘗試使用不同的模塊。」表示不同的窗口? – WPFUser

+0

是的,不同的窗口可能是這種情況適用的一種情況。然而,我經常創建只是代碼模塊來組織我的代碼。 – user1500403

回答

1

你可以使用x:FieldModifier指令來改變控制字段的修改,以便能夠從其它類訪問:

<TextBox x:Name="textbox1" x:FieldModifier="public" /> 

X:FieldModifier:https://msdn.microsoft.com/en-us/library/aa970905(v=vs.110).aspx

另一種選擇是在代碼隱藏類的觀點來定義屬性,通過此屬性訪問控制:

Class MainWindow 
    Public ReadOnly Property TheTextBox() As TextBox 
     Get 
      Return textbox1 
     End Get 
    End Property 
End Class 

在這兩種情況下,你將需要得到在訪問其任何控件之前對該窗口的引用。例如,您可以使用Application.Current.Windows集合獲取對打開窗口的引用:

Dim mainWindow As MainWindow = Application.Current.Windows.OfType(Of MainWindow).FirstOrDefault() 
Dim s As String = mainWindow.TheTextBox.Text 
+0

因爲我想在一個例程中獲得一個小於一秒的值,並且是通過按鈕單擊來觸發的,我只是使用了窗口引用。它可能不完全符合用戶界面和數據分離的精神,但它對我的應用程序有效。謝謝 – user1500403

0

只要你的代碼命名在你後面應該能夠:

var data = MyTextBox.Text; 

//Do whatever with your data. 
相關問題