0

我有 2 个窗口。当我按下一个按钮时,我想将一个Person对象从当前传递Window给另一个。

这是主窗口中的代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    person owner = new person();
    owner.ID = 1;
    owner.Name = "Mark";
    w2 newWindow = new w2(owner);

    newWindow.Show();
}

在另一个名为w2我的窗口中,我有以下代码:

public partial class w2 : Window
{
    public class person
    {
        int _ID;
        string _Name;

        public int ID
        {
            get { return _ID; }
            set { _ID = value; }
        }
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
   }

   public w2()
   {
       InitializeComponent();
   }

   public w2(person passedPerson) : this()
   { 
       this.passedPerson = passedPerson;
   }
}

当我尝试编译时出现这些错误:

错误 3“passing.w2”不包含“passedPerson”的定义,并且找不到接受“passing.w2”类型的第一个参数的扩展方法“passedPerson”(您是否缺少 using 指令或程序集引用?48 18 次通过

错误 1 ​​'passing.w2.w2(passing.w2.person)' 的最佳重载方法匹配有一些无效参数 57 28 传递

错误 2 参数 1:无法从 'passing.MainWindow.person' 转换为 'passing.w2.person' 57 35 传递

顺便提一句。我使用这个例子作为起点:

http://go4answers.webhost4life.com/Example/pass-variables-windowopen-wpf-31068.aspx

4

5 回答 5

1

尝试显式分配传递者的每个属性。我的意思是尝试做

public w2(MainForm.person passedPerson)
        : this()
{
    this.passedPerson.ID = passedPerson.ID;
    this.passedPerson.Name = passedPerson.Name;
}

您可能已经为 Person 定义了 2 个类。每种形式一个。

虽然你应该只定义一个人一次。(创建一个单独的类并将其用于两种形式)

于 2013-02-27T14:44:03.240 回答
1

所以首先,简单的一个:

“passing.w2”不包含“passedPerson”的定义

当你说:

this.passedPerson = passedPerson;

显然,您正在尝试为该人分配一个实例字段,但没有这样的字段。只需添加一个:

private person passedPerson;

对于其他两个错误,这是因为您定义了两个person类,每个窗口中都有一个类。你不应该那样做。仅仅因为有两个类具有相同的名称和相同的字段,并不能使它们成为同一个类,也不意味着您可以将一个视为另一个。

person在顶层创建你的类(最好是在它自己的文件中),并确保两个窗口都使用那个定义。

另请注意,按照惯例,类名以大写字母开头:

于 2013-02-27T15:19:37.040 回答
1

试试这个,第一个窗口 LoginPageWindow

public partial class LoginPageWindow : Window
 {

    private void btnSave_Click(object sender, RoutedEventArgs e)
    {
       new Suucessfullogin(textboxvalue.text).ShowDialog();
    }
 }

在第二个窗口中,我们可以获得价值

public partial class Suucessfullogin : Window
{
      string str;   
    public Suucessfullogin(string value)
    {
        InitializeComponent();
        str= value;     
    }
}
于 2017-02-23T11:21:05.000 回答
0

只是将一个类嵌套在一个类中并不会创建它的成员。尝试

public partial class w2 : Window
{
   private person passedPerson;
   ....
}

然后用参考填充您的成员。

或者更好:将您的班级人员放在其他班级之外,以便他们都可以访问其定义。

于 2013-02-27T14:44:10.037 回答
0

您确定您的“所有者”变量是 w2 类 (w2.person) 中定义的人员类型吗?您的 this.passedPerson 字段在哪里定义?看起来它根本没有定义。如果您想在“父”类之外使用它,则不应创建内部类。只需在单独的文件中创建 Person 类。

于 2013-02-27T14:44:18.587 回答