如何使用wpf c#中的类将表单中的值传递给另一个表单?

时间:2015-08-09 16:58:11

标签: c# wpf

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

这是第一个表格代码:

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

4 个答案:

答案 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();
}