我试图将第一个表单的标签值发送到第二个表单的标签值, 但是当我按下第一个表单中的按钮打开第二个表单时,标签为空, 没有值从第一种形式传递到第二种形式。
这是第一个表格代码:
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();
}
答案 0 :(得分:0)
您正在处理SenderClass的两个实例以及这些实例中的成员变量。如果希望独立于实例具有相同的值,则需要使flName属性为静态。
答案 1 :(得分:0)
您可以在两种形式中创建SenderClass
的新实例。因此,这两种表单正在处理另一个fl
。
相反,请以第二种形式
创建一个公共只写属性public string FLnameContent
{
set {
lblFLname.Content = value;
}
}
在第一种形式中写:
var secondForm = new SecondForm();
secondForm.FLnameContent = lblFLName.Content;
secondForm.Show();
表单只是类实例,您可以像在任何其他类一样在它们之间传输数据。它们是形式的事实没有区别。
另外,请参阅此答案,该答案解释了如何在C#中编写属性:https://stackoverflow.com/a/9854944/880990
答案 2 :(得分:0)
在btnFirstForm_Click
以及Grid_Loaded中,您正在创建该类的单独实例。即使对象名称(f1
)相同,编译器也会将它们视为单个对象,因为它们是同一个类的单独实例。所以我建议你使用如下:
在static Property
课程中创建secondForm()
。
你应该定义一个静态属性,因为甚至公共属性 需要参考。
public class secondForm
{
public string setFLname
{
set{lblFLname.Content = value;}
}
}
然后重新编写按钮点击,如下所示:
private void btnFirstForm_Click(object sender, RoutedEventArgs e)
{
secondForm.setFLname= lblFLName.Content;
SecondForm secondFormInstant = new SecondForm();
secondFormInstant.Show();
this.Hide();
}
,您的Grid_Loaded()
方法将如下所示
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
SenderClass fl=new SenderClass();
lblFLname.Content = "Welcome" + setFLname;
}
答案 3 :(得分:0)
您为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();
}