【问题标题】:Changing an Object's properties in another class?在另一个类中更改对象的属性?
【发布时间】:2011-12-14 03:24:07
【问题描述】:

我正在尝试从另一个类更改对象的属性,就像这样。

abilities.cs(类)

        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(表格)

私人无效btnAbility1_Click(对象发送者,EventArgs e) { 能力.hideAllButtons(); btnAbilities.Enabled = 假; }

在我的知识和理解范围内,我已经尝试了一切,并在互联网上进行了大量查找。我尝试使对象成为静态的、公共的,在类中创建对象。但没有任何效果。通常我会收到 StackOverFlow 错误。

我对 OOP 也很陌生,但我不是白痴,所以不要以为我的问题可能会解决或导致我的问题太“轻率” - 如果你明白,那是。

【问题讨论】:

  • 嗨,布莱恩。你能解释一下为什么要在 hideAllButtons() 中实例化一个新的 frmFight 实例吗?
  • 嘿。是的,btnAbilityX 对象是在 frmFight 表单上制作的。所以我不必在能力类中创建它们的新实例以供参考吗?
  • 在这种情况下,无需创建新的 frmFight 实例。我在下面看到了几个很好的解决方案,所以我不会发布答案。祝你在 OOP 中好运!
  • 谢谢!第一个问题,快速响应。谢谢:)

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


【解决方案1】:

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

【讨论】:

  • 谢谢!这非常有效。你能不能告诉我为什么我错了,这到底是做什么的?如果没有,那不是问题!再次感谢您的回答。
  • 您正在创建一个新的 frmFight 实例并隐藏该实例上的按钮,但没有更改原始表单上的按钮。第二种形式将一直隐藏,直到最终被垃圾收集器删除。此代码将 frmFight 对象传递给 hideAllButtons 方法,因此更改是在可见表单上完成的。
【解决方案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;
    }

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多