Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改对象';其他类中的属性?_C#_Visual Studio 2010_Oop_Stack Overflow - Fatal编程技术网

C# 更改对象';其他类中的属性?

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也很陌生,但我不是白痴,所以不要认

我试图从另一个类更改对象的属性,如下所示

C.C(班级)

我试图使用上一个类中的方法来更改对象的属性,格式如下

frmFight.cs(表格)

私有void btnAbility1\u单击(对象发送方,事件参数e) { 能力。隐藏按钮(); btnAbilities.Enabled=false; } 我已经尝试了我的知识和理解的一切,并在互联网上查找了很多。我尝试过将对象设置为静态的、公共的,并在类中创建对象。但什么都不管用。通常我会遇到堆栈溢出错误


我对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);