C# 如何向Windows窗体的所有者进行引用?
Visual Studio 2013,Visual C#,Windows窗体应用程序 我对两种形式的课程感兴趣。在gameform.cs之后的和gameform.cs之后的 只有当用户单击第二个按钮时,第一个按钮才会弹出C# 如何向Windows窗体的所有者进行引用?,c#,winforms,C#,Winforms,Visual Studio 2013,Visual C#,Windows窗体应用程序 我对两种形式的课程感兴趣。在gameform.cs之后的和gameform.cs之后的 只有当用户单击第二个按钮时,第一个按钮才会弹出 AfterTheGameForm afterTheGameForm = new AfterTheGameForm(); afterTheGameForm.Show(this); 所以很明显,游戏形态是游戏形态之后的所有者。这就是我的问题在AfterHegameForm类中中,
AfterTheGameForm afterTheGameForm = new AfterTheGameForm();
afterTheGameForm.Show(this);
所以很明显,游戏形态是游戏形态之后的所有者。这就是我的问题在AfterHegameForm类中中,我想引用所有者类以使用其特定方法。我确信游戏的主人属于游戏类型,我正在尝试施展:
TheGameForm gForm = (TheGameForm)this.Owner;
if(gForm!=null){
MessageBox.Show(theGameForm.CheckedRadioButton);
}
else
{
MessageBox.Show("theGameForm==null");
}
我也试过这个演员:
TheGameForm gForm = this.Owner as TheGameForm;
gForm对象为空这是怎么可能的?这可能是因为您正在构造函数中访问它。
所有者
设置在构造函数之后。请尝试加载事件。这可能是因为您正在构造函数中访问它。所有者
设置在构造函数之后。尝试加载事件。如果没有良好的测试,就无法诊断代码中的问题。也就是说,从您发布的一点点代码来看,您的在游戏表单
之后显然与游戏表单
紧密耦合,即它知道类型并直接访问类的特定成员。更好的设计是使用事件或其他抽象来允许表单进行交互,而不必以那种方式相互绑定。换句话说,AfterheGameForm
甚至不需要设置Owner
属性来实现此处正确的事情。是的,您是对的。我不知道如何设计好的代码,这是我的问题!:)我在所有者那里找到了这个解决方案,并尝试使用它。另一种方法是thegameformgform=Application.OpenForms.OfType().FirstOrDefault()代码>如果没有良好的诊断,就不可能诊断代码中的问题。也就是说,从您发布的一点点代码来看,您的在游戏表单
之后显然与游戏表单
紧密耦合,即它知道类型并直接访问类的特定成员。更好的设计是使用事件或其他抽象来允许表单进行交互,而不必以那种方式相互绑定。换句话说,在游戏形式之后
甚至不需要设置所有者
属性,就可以在这里发生正确的事情。是的,你是对的。我不知道如何设计好的代码,这是我的问题!:)我在所有者那里找到了这个解决方案,并尝试使用它。另一种方法是thegameformgform=Application.OpenForms.OfType().FirstOrDefault()代码>为什么原始代码试图在构造函数中使用Owner
?据推测,OP至少了解,由于构造函数必须在调用Show()
方法之前返回,因此不可能在那里设置Owner
属性。实际上,在构造函数之后设置Owner可能会有所帮助@Jeroen van Langen它也在加载事件中起作用!为什么原始代码试图在构造函数中使用Owner
?据推测,OP至少了解,由于构造函数必须在调用Show()
方法之前返回,因此不可能在那里设置Owner
属性。实际上,在构造函数之后设置Owner可能会有所帮助@Jeroen van Langen它也在加载事件中起作用!