我有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'的定义,并且没有扩展方法'passedPerson'接受类型'passing.w2'的第一个参数可以找到(你是否缺少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
答案 0 :(得分:1)
尝试明确指定传递的人的每个属性。我的意思是尝试做
public w2(MainForm.person passedPerson)
: this()
{
this.passedPerson.ID = passedPerson.ID;
this.passedPerson.Name = passedPerson.Name;
}
您可能已为Person定义了2个类。每种形式一种。
虽然你应该只定义一次人。 (创建一个单独的类并将其用于两种形式)
答案 1 :(得分:1)
首先,简单的一个:
'passing.w2'不包含'passedPerson'的定义
当你说:
this.passedPerson = passedPerson;
显然,您正在尝试为此人分配实例字段,但没有此类字段。只需添加一个:
private person passedPerson;
对于其他两个错误,这是因为您定义了两个person
类,每个窗口一个。你不应该这样做。仅仅因为有两个具有相同名称和相同字段的类,不会使它们成为同一个类,并不意味着您可以将其视为另一个类。
在顶层创建您的person
类(理想情况下,在其自己的文件中),并确保两个窗口都使用该定义。
另请注意,按照惯例,类名以大写字母开头:
答案 2 :(得分:0)
将类嵌套在类中并不会创建它的成员。 试试
public partial class w2 : Window
{
private person passedPerson;
....
}
然后使用引用填充您的成员。
或更好:将您的班级人员置于其他班级之外,以便他们都可以访问其定义。
答案 3 :(得分:0)
您确定您的“所有者”变量属于w2类(w2.person)中定义的类型吗?你的this.passedPerson字段定义在哪里?它看起来根本没有定义。 如果要在“父”类之外使用它,则不应创建内部类。只需将Person类放在一个单独的文件中即可。