C# 更改对象';其他类中的属性?
我试图从另一个类更改对象的属性,如下所示 C.C(班级) 我试图使用上一个类中的方法来更改对象的属性,格式如下 frmFight.cs(表格) 私有void btnAbility1\u单击(对象发送方,事件参数e) { 能力。隐藏按钮(); btnAbilities.Enabled=false; } 我已经尝试了我的知识和理解的一切,并在互联网上查找了很多。我尝试过将对象设置为静态的、公共的,并在类中创建对象。但什么都不管用。通常我会遇到堆栈溢出错误C# 更改对象';其他类中的属性?,c#,visual-studio-2010,oop,stack-overflow,C#,Visual Studio 2010,Oop,Stack Overflow,我试图从另一个类更改对象的属性,如下所示 C.C(班级) 我试图使用上一个类中的方法来更改对象的属性,格式如下 frmFight.cs(表格) 私有void btnAbility1\u单击(对象发送方,事件参数e) { 能力。隐藏按钮(); btnAbilities.Enabled=false; } 我已经尝试了我的知识和理解的一切,并在互联网上查找了很多。我尝试过将对象设置为静态的、公共的,并在类中创建对象。但什么都不管用。通常我会遇到堆栈溢出错误 我对OOP也很陌生,但我不是白痴,所以不要认
我对OOP也很陌生,但我不是白痴,所以不要认为对我的问题的可能解决方案或原因太“轻率”了-如果你理解的话,那就是。这真的不起作用,因为你的控制权在你的右手上 你需要做的就是找到一个合适的地方
private void hideAllButtons()
{
btnAbility1.Visible = false;
btnAbility2.Visible = false;
btnAbility3.Visible = false;
btnAbility4.Visible = false;
btnAbility5.Visible = false;
btnAbility6.Visible = false;
vars.buttonsVisible = false;
}
在您的frmFight.cs(表单)上,将其作为私有方法,只需在您的按钮上调用它,单击以使其更简单
private void btnAbility1_Click(object sender, EventArgs e)
{
hideAllButtons();
btnAbilities.Enabled = false;
}
关于方法隐藏按钮是静态的,因此应该有一个表单参数
public static void hideAllButtons(frmFight fight)
{
fight.btnAbility1.Visible = false;
fight.btnAbility2.Visible = false;
fight.btnAbility3.Visible = false;
fight.btnAbility4.Visible = false;
fight.btnAbility5.Visible = false;
fight.btnAbility6.Visible = false;
//vars.buttonsVisible = false; // What about this???
}
并在click handler中调用此方法
hideAllButtons(this);
嗨,布莱恩。你能解释一下为什么要在HidealButtons()中实例化一个新的frmFight实例吗?嘿。是的,btnAbilityX物体是在frmFight表格上制作的。所以我不需要在Capabilities类中为它们创建一个新实例,以便它们被引用吗?在这种情况下,不需要创建一个新的frmFight实例。我在下面看到了一些很好的解决方案,所以我不会给出答案。祝你在OOP中好运!非常感谢。第一个问题,快速回答。谢谢:)谢谢!这很有效。你能告诉我为什么我错了吗?这到底是怎么回事?如果没有,那就没问题了!再次感谢您的回答。您正在创建一个新的frmFight实例并隐藏该实例上的按钮,但没有更改原始窗体上的按钮。第二个表单将保持隐藏状态,直到垃圾收集器最终将其删除。这段代码将frmFight对象传递给hidealButtons方法,以便在可见窗体上完成更改。
public static void hideAllButtons(frmFight fight)
{
fight.btnAbility1.Visible = false;
fight.btnAbility2.Visible = false;
fight.btnAbility3.Visible = false;
fight.btnAbility4.Visible = false;
fight.btnAbility5.Visible = false;
fight.btnAbility6.Visible = false;
//vars.buttonsVisible = false; // What about this???
}
hideAllButtons(this);