在C#表单之间传递数据

时间:2016-08-28 06:49:08

标签: c# wpf

我正在努力在两个表单之间传递数据(我想要做的就是在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;。

2 个答案:

答案 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;