在另一个类中更改Object的属性?

时间:2011-12-14 03:24:08

标签: c# visual-studio-2010 oop stack-overflow

我正在尝试从另一个类更改Object的属性,如此。

abilities.cs(class)

        public static void hideAllButtons()
        {
            frmFight fight = new frmFight();
            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;
        }

我正在尝试使用上一个类中的方法在以下表单中更改对象的属性;

frmFight.cs(表格)

        private void btnAbility1_Click(object sender, EventArgs e)
        {
            abilities.hideAllButtons();
            btnAbilities.Enabled = false;
        }

我已经在我的知识和理解中尝试了一切,并在互联网上查了很多。我已经尝试将对象设置为static,public,在类中创建对象。但没有任何作用。通常我会收到StackOverFlow错误。

我对OOP也很陌生,但我不是一个白痴,所以不要因为我的问题可能的解决或原因而过于轻率地对我这么做 - 如果你明白的话,那就是是

2 个答案:

答案 0 :(得分:4)

方法hideAllButtons是静态的,因此应该有一个Form参数。

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

答案 1 :(得分:2)

这真的不行,因为你的控件在你的frmFight上。

你需要做的就是放置

 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;
    }

此致