我正在努力在两个表单之间传递数据(我想要做的就是在Form1中有一个文本框,并在textbox1中显示文本框值,它位于Form2中)。我将如何使用WPF进行此操作?已经看了很多解决方案,但似乎无法让它们中的任何一个起作用。
对于我想要显示值的表单(在tbd.Text中),这里是代码:
namespace test
{
/// <summary>
/// Interaction logic for OptionDisplayWindow.xaml
/// </summary>
public partial class OptionDisplayWindow : Window
{
public OptionDisplayWindow()
{
InitializeComponent();
tbd.Text = "k"; //want to change this value based on "s" in the other form
}
从中传输文本的表单(想要显示字符串):
public void Button1_Click(object sender, RoutedEventArgs e)
{
string s = "testText"
}
我已经尝试过每一个关于SO的其他答案(过去6个小时都在尝试)并且绝对没有运气。
编辑2:使用此处列出的最佳答案的方法Send values from one form to another form我已经为Form1提供了此代码:
private void ttbtn_Click(object sender, RoutedEventArgs e)
{
using (Form2 form2 = new Form2())
{
tbd.Text = form2.TheValue;
}
}
Form2的代码:
public string TheValue
{
get { return arrayTest.Text; }
}
但是,我收到错误&#39;表单2&#39;:在using语句中使用的类型必须可以隐式转换为&#39; System.IDisposable&#39;。
答案 0 :(得分:2)
您放入示例项目的代码(您在评论中作为链接提供的代码)应该在您的问题中。鉴于您更容易理解您正在尝试做什么并为您提供可行的解决方案。
我建议创建一个“DataTransferObject”并在每个表单之间传递它。
SQLALchemy
public class Dto
{
public string Text;
}
中的代码如下所示:
MainWindow
private void button1_Click(object sender, RoutedEventArgs e)
{
var dto = new Dto();
window2 win2 = new window2();
win2.Dto = dto;
win2.ShowDialog();
textBox1.Text = dto.Text;
}
中的代码如下所示:
window2
这是表单之间传输数据的一种方式 - 大约一百万。使用数据传输对象的一个优点是它使您开始将数据与UI分离,这通常是一件非常好的事情。
答案 1 :(得分:1)
在表单之间传递数据的另一种简单方法是使用应用程序的设置。
步骤1:创建设置,打开“项目”菜单并选择“测试属性...”
这将带您进入设置页面,根据需要创建一个设置名称,我将其命名为“PassString”,并确保它是字符串类型,并将Scope设置为user。
步骤2.让我们将字符串设置设置为textbox.text属性,将这些更改添加到代码中:
private void button1_Click(object sender, RoutedEventArgs e)
{
Properties.Settings.Default.PassString = textBox1.Text;
window2 win2 = new window2();
win2.ShowDialog();
}
步骤3.更新第二个窗口初始化过程中的文本。
public OptionDisplayWindow()
{
InitializeComponent();
tbd.Text = Properties.Settings.Default.PassString;
}
P.S。您可能需要添加引用以达到您的应用程序设置。
using test.Properties;