如何使用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()创建一个实例代码>与任何非静态类一样。类是对象的蓝图。这样的对象是类实例。