Изменение свойств объекта в другом классе? - PullRequest
2 голосов
/ 14 декабря 2011

Я пытаюсь изменить свойства объекта из другого класса, например так.

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

Я испробовал все в моих знаниях и понимании, и много искалв Интернете.Я пытался сделать объекты статичными, публичными, создать объект внутри класса.Но ничего не работает.Обычно я получаю ошибки StackOverFlow.

Я тоже довольно плохо знаком с ООП, но я не идиот, так что не думайте, что вы будете слишком "легки" относиться ко мне с возможным исправлением или причиной,моей проблемы - если вы понимаете, это.

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

Метод 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);
2 голосов
/ 14 декабря 2011

Это действительно не сработает, потому что ваши элементы управления находятся на вашем 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;
    }

Привет

...