在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'。
您放在示例项目中的代码(您在注释中作为链接提供的代码)应该在您的问题中。考虑到它变得更容易理解你在做什么,并给你一个可行的解决方案。
我建议创建一个"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;