2016-12-27 27 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. 
相关问题