如何使用wpf c#中的类将值从一个窗体传递到另一个窗体?

如何使用wpf c#中的类将值从一个窗体传递到另一个窗体?,c#,wpf,C#,Wpf,我试图从第一个表单发送一个标签值到第二个表单的标签值, 但当我按下第一个表单中的按钮打开第二个表单时,标签为空, 没有值从第一个表单传递到第二个表单 这是第一种形式代码: private void btnFirstForm_Click(object sender, RoutedEventArgs e) { SenderClass fl = new SenderClass(); fl.setFLname(lblFLName.Content); secondForm.Show

我试图从第一个表单发送一个标签值到第二个表单的标签值, 但当我按下第一个表单中的按钮打开第二个表单时,标签为空, 没有值从第一个表单传递到第二个表单

这是第一种形式代码:

private void btnFirstForm_Click(object sender, RoutedEventArgs e)
{
    SenderClass fl = new SenderClass();
    fl.setFLname(lblFLName.Content);
    secondForm.Show();
    this.Hide();
}
这里是将值从第一种形式转移到第二种形式的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class SenderClass
{
    object flName;

    public SenderClass() {}

    public void setFLname(object flNAME)
    {
        flName = flNAME;
    }

    public object getFLname()
    {
        return flName;
    }
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
    SenderClass fl=new SenderClass();
    lblFLname.Content = "Welcome" + fl.getFLname();
}
这是第二种形式的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class SenderClass
{
    object flName;

    public SenderClass() {}

    public void setFLname(object flNAME)
    {
        flName = flNAME;
    }

    public object getFLname()
    {
        return flName;
    }
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
    SenderClass fl=new SenderClass();
    lblFLname.Content = "Welcome" + fl.getFLname();
}

您正在处理SenderClass的两个实例以及这些实例中的一个成员变量。如果希望具有独立于实例的相同值,则需要将flName属性设置为静态。

您可以创建两种形式的
SenderClass
的新实例。因此,这两个表单正在另一个
fl
上工作

相反,创建第二种形式的公共纯写属性

public string FLnameContent
{
    set {
        lblFLname.Content = value;
    }
}
在第一种形式中,写:

var secondForm = new SecondForm();
secondForm.FLnameContent = lblFLName.Content;
secondForm.Show();
表单只是类实例,您可以像处理任何其他类一样在它们之间传输数据。事实上,它们是形式,没有什么区别



另外,请参见这个解释如何在C#中编写属性的答案:

btnFirstForm\u单击
中,以及在Grid\u加载中,创建类的单独实例。即使对象名(
f1
)相同,编译器也将它们视为单个对象,因为它们是同一类的单独实例。因此,我建议您使用以下方法:

 private void btnFirstForm_Click(object sender, RoutedEventArgs e)
 {
    secondForm.setFLname= lblFLName.Content;
    SecondForm secondFormInstant = new SecondForm();
    secondFormInstant.Show();
    this.Hide();
 }
secondForm()
类中创建一个
静态属性

您应该定义静态属性,因为即使是公共属性 需要一个参考

然后按如下方式重新编写按钮并单击:

 private void btnFirstForm_Click(object sender, RoutedEventArgs e)
 {
    secondForm.setFLname= lblFLName.Content;
    SecondForm secondFormInstant = new SecondForm();
    secondFormInstant.Show();
    this.Hide();
 }
您的
Grid\u Loaded()
方法如下所示

private void Grid_Loaded(object sender, RoutedEventArgs e)
{
    SenderClass fl=new SenderClass();
    lblFLname.Content = "Welcome" + setFLname;
}

您为SenderClass创建了两个不同的实例,这就是为什么fl.getFLName()为null。 SenderClass实例可以作为变量在函数外部创建

SenderClass fl = new SenderClass();

private void btnFirstForm_Click(object sender, RoutedEventArgs e)
{
    fl.setFLname(lblFLName.Content);
    secondForm.Show();
    this.Hide();
}

private void Grid_Loaded(object sender, RoutedEventArgs e)
{
    lblFLname.Content = "Welcome" + fl.getFLname();
}

两者都是不同的实例,这就是为什么您没有得到值的原因
secondForm
是一个类而不是该类的实例,所以您需要创建一个实例来访问
公共属性
,不是吗?您必须使用
secondForm=new secondForm()创建一个实例与任何非静态类一样。类是对象的蓝图。这样的对象是类实例。