0

private void QuizReset()呼び出されたフォームで名前が付けられた関数があり、ビルドエラーを発生させずにFormMain名前が付けられたフォームでそれにアクセスする方法があるかどうか疑問に思っていましたか? Form2非常に単純な質問または私が見逃しているもののように思えるかもしれませんが、プライベートからパブリックに変更しようとしましたが、ビルドエラーなどが発生するため、正しく行ってはいけません. エラーなしで実行できる場合は、それを変更する準備ができています。誰かが私を助けることができれば、それは素晴らしいことです.

ありがとうございました。

関数の現在のコードは次のとおりです。

private void QuizReset()
    {
        //resets the difficulty selection control and shows it again upon resetting the quiz
        difficultySelectionControl.Reset();
        difficultySelectionControl.BringToFront();

        btnNext.Enabled = false;
        lblStatus.Text = "Please select a difficulty";

        iCorrectACount = 0;
        iCurrentQIndex = 0;
    }
4

3 に答える 3

0

メソッドにアクセスする場合は、プライベートにすることはできません。static public簡単な回避策です。次に、で呼び出すことができますMainForm.LoadQuiz()。もう1つのオプションは、ロジックをヘルパークラスに移動することです。

于 2013-03-14T19:38:52.503 に答える
0

この関数を一般的な静的クラスに入れることはできないと思います。なぜなら、私が正しく理解していれば、関数はform(btnNext.Enabled = false;)のコントロールを使用するからです。FormMainこれは、関数がクラスのインスタンスでのみ使用できる/使用する必要があることを意味します。

この関数をから呼び出したい場合はForm2Form2の参照が必要ですFormMain

私のアプローチは次のとおりです。

で変数を作成しますForm2

private FormMain frmMain;

次に Form2、の参照を割り当てる場所のコンストラクターを作成FormMainしますForm2

public Form2(FormMain inFrmMain)
{
    this.frmMain = inFrmMain;
}

のオープニングのコードは次のForm2ようになります。

Form2 frm2 = New Form2(this);
frm2.Show();

FormMainこの後、次の場所から関数を呼び出すことができますForm2

this.frmMain.QuizReset()

そしてもちろん、最初は機能QuizResetをパブリックに変更します

于 2013-03-14T20:20:55.503 に答える
0

それらを公開共通クラスに入れます。次に、そのクラスに属するプライベートな静的メソッドとして LoadQuiz 関数を配置します。また、LoadQuiz を静的パブリックにすることもできます。これは迅速かつダーティです。メソッドを公に公開すると、後でメモリと割り当ての問題が発生する可能性があるため、お勧めしません。

于 2013-03-14T19:46:03.357 に答える