2011-12-14 6 views
2

私はオブジェクトのプロパティを別のクラスから変更しようとしています。私は、以下のフォームでのオブジェクトのプロパティを変更するには、以前のクラスからメソッドを使用しようとしている別のクラスのオブジェクトのプロパティを変更しますか?

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

。私は私の知識と理解、およびインターネット上で見上げるの多くにすべてを試みた

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

frmFight.cs(フォーム)。私はオブジェクトを静的、パブリックにして、クラス内でオブジェクトを作成しようとしました。しかし、何も動作しません。通常、私はStackOverFlowエラーを取得します。

私もOOPの新人ですが、私はばかではありませんので、私の問題の可能性の修正、または原因で私に軽く行くとは思わない - あなたが理解すれば、あれは。

+0

こんにちはブライアン、クリックハンドラでこのメソッドを呼び出します。 hideAllButtons()でfrmFightの新しいインスタンスをインスタンス化する理由を説明できますか? – SquidScareMe

+0

ねえ。ええ、btnAbilityXオブジェクトはfrmFightフォームで作成されました。だから私は彼らのために彼らのために新たなインスタンスを作成しなければならないのですか? – Brian

+0

の場合、frmFightの新しいインスタンスを作成する必要はありません。私は以下のいくつかの良い解決策を見るので、私は答えを投稿しません。 OOPで幸運を祈る! – SquidScareMe

答えて

4

方法hideAllButtonsが静的​​であるので、フォームの引数を持つ必要があります。

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

ありがとう!これは完全に機能しました。なぜ私が間違っていたのか、そして正確にはどういうことを教えてもらえますか?そうでなければ、それは問題ではありません!答えにもう一度感謝します。 – Brian

+1

frmFightの新しいインスタンスを作成し、そのインスタンスにボタンを隠していましたが、元のフォームのボタンは変更しませんでした。この2番目の形式は、最終的にガベージコレクタによって削除されるまで隠されたままになります。このコードは、frmFightオブジェクトをhideAllButtonsメソッドに渡すため、変更が可視フォームで行われます。 – TheEvilPenguin

2

あなたのコントロールがfrmFight上にあるため、これは実際には機能しません。あなたがする必要がある

は、民間の方法として、あなたのfrmFight.cs(フォーム)に開催

private void hideAllButtons() 
    { 
     btnAbility1.Visible = false; 
     btnAbility2.Visible = false; 
     btnAbility3.Visible = false; 
     btnAbility4.Visible = false; 
     btnAbility5.Visible = false; 
     btnAbility6.Visible = false; 
     vars.buttonsVisible = false; 
    } 

で、ちょうどそれが簡単にするためにあなたのボタンのクリックでそれを呼び出します。

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

よろしく

関連する問題