在c#表单之间传递数据

本文关键字:数据 之间 表单 | 更新日期: 2023-09-27 18:04:16

我正在努力在两个表单之间传递数据(我所要做的就是在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:使用这里列出的最佳答案的方法将值从一个表单发送到另一个表单,我已经想出了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; }
        }

然而,我得到错误'Form 2':在using语句中使用的类型必须隐式转换为'System.IDisposable'。

在c#表单之间传递数据

您放在示例项目中的代码(您在注释中作为链接提供的代码)应该在您的问题中。考虑到它变得更容易理解你在做什么,并给你一个可行的解决方案。

我建议创建一个"DataTransferObject"并在每个表单之间传递。

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中的代码是这样的:

    public Dto Dto;
    private void textBox2_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (this.Dto != null)
        {
            this.Dto.Text = textBox2.Text;
        }
    }

这是在表单之间传输数据的一种方法——大约有一百万种。使用数据传输对象的一个优点是,它使您开始将数据与UI分离,这通常是一件非常好的事情。

另一种在表单之间传递数据的简单方法是使用应用程序的设置。

步骤1:创建一个设置,打开"Project"菜单并选择"test Properties…"

这将带你到设置页面,创建一个你想要的设置名称,我将我的命名为"PassString",并确保它是字符串类型,范围设置为user。

步骤2。让我们将字符串设置为您的文本框。文本属性,将这些更改添加到代码中:

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;
    }

注:你可能需要添加一个引用来达到你的应用程序设置。

    using test.Properties;