0

この質問が以前に尋ねられたこと、または同様の質問が尋ねられたことは知っていますが、どの解決策もまだ私の問題を解決していません。

という名前のボタンを持つwinformがありますhitButton。私がする必要があるのは、このボタンを別のクラス (つまり、フォーム クラスではない) から無効にすることだけです。

私のフォームクラスは次のとおりです。

public partial class BlackJackTable : Form
{
}

私の別のクラスは次のとおりです。

class GameWon
{
}

私はこのようにパブリックメソッドを公開しようとしましたBlackJackTable:

public void DisableButtons()
{
    hitButton.Enabled = false;
}

次のように、コンストラクターからアクセスしGameWonます(ただし、クラスのどこからアクセスしてもかまいません)。

public BlackJackTable blackJackTable = new BlackJackTable();

public GameWon()
{
    blackJackTable.DisableButtons();
}

で変数を使用してみましたGameWon:

public Button hit;

そしてblackJackTableからの割り当て:

GameWon gameWon = new GameWon();

public void Assign()
{
    gameWon.hit = this.hitButton; // or just = hitButton;
}

から無効にするGameWon

hit.Enabled = false;

他にもいくつか試しましたが、どれも機能しません。私が試した方法はどれもうまくいかなかったので、明らかな何かが欠けていると思います。

どんな考えでも大歓迎です!

アップデート

テキストボックスとピクチャボックスで後者の方法を実行できましたが、ボタンとの違いは何ですか?

4

4 に答える 4

3

動作しない理由はDisableButtons、間違ったインスタンスを呼び出しているためですBlackJackTable。クラスGameWonは独自の非表示のBlackJackTableオブジェクトを作成し、それをBlackJackTable blackJackTable変数に格納して、そのボタンを無効にします。表示されているフォーム オブジェクトは変更されません。

これを修正するには、BlackJackTableフォームのインスタンスを のコンストラクターに渡し、GameWonそれを変数に設定する必要があります。

private readonly BlackJackTable blackJackTable;

public GameWon(BlackJackTable blackJackTable) {
    this.blackJackTable = blackJackTable;
}

クラスのインスタンスを作成するコードはGameWon、フォームをパラメーターとしてコンストラクターに渡す必要があります。

GameWon gameWon = new GameWon(myBjTable);
于 2012-04-21T11:01:00.400 に答える
0

後者の方法を使用してこれを修正することになりましたが、Button変数を静的にしました。

public static Button hit;

クラスのインスタンスが混同されていたに違いありません。あなたのアイデアをありがとう。

于 2012-04-21T14:37:17.147 に答える
0

あなたはコンストラクターで多くの仕事をしています。これは、特にフォームの場合、しばしば悪い習慣です。フォームが表示される前に、フォーム上のオブジェクトのプロパティを変更しているようです。これにより、予期しない動作が発生するのは驚きではありません。推測すると、コードの実行後にフォームの初期化によってボタンの状態がリセットされていると思います。フォームは、それ自体のライフサイクル要件を完全に保護します。フォームが表示の準備をする方法に関係する特異性に遭遇したに違いないと思います。

あなたがここでかなり奇妙な建築を提示したことを指摘しなければなりません。アプリケーションをこのように配置することを選択した理由を理解するのに苦労しています。おそらくコントローラーで発生したイベントを使用してフォームがそれ自体を変更できるようにすることで、コントローラークラスからフォームおよびゲームクラスと通信することが望ましいと思います。フォームが画面に表示されているときにフォームの状態を変更することは、常に機能するはずです。

于 2012-04-22T09:07:12.840 に答える
0

元のクラスに値を返してから、ボタンを無効にすることができます: サーバーで実行されるスクリプト内でプロパティを呼び出す方法

于 2012-04-21T11:00:39.820 に答える