-3

この質問はおそらくすでに回答されています。グーグルで間違った質問を入力している可能性がありますtime_refreshが、form1にあり、form2からうまく機能する関数を実行したいと思います。これは私がこれまでに得たものです:

Form1

public void time_refresh()
    {
        run_stop.Text = Properties.Settings.Default.s_update + " " + Properties.Settings.Default.s_update_int;
        run_stop.ForeColor = Color.Green;
    }

Form2

private Main_form_1 form1 = null;

form1.time_refresh();

しかし、エラーが発生します

オブジェクト参照がオブジェクト インスタンスに設定されていません。C#は初めてなので、どんな助けでも素晴らしいでしょう。

4

5 に答える 5

0

値を割り当てなかったため、このエラーが発生しform1ます。

たとえば、次の場所にプロパティを作成できますform2

public Main_form_1 Form1 { get { return form1; } set { form1 = value; } }

初期化時form1に割り当てます。form2

// code from some form1 method
var form2 = new form2();
form2.Form1 = this;
form2.Show();
于 2012-12-20T16:11:19.917 に答える
0

form1Form2内で変数を初期化する必要があります。
現状では、これはnull値を持つタイプMain_form_1の変数です(つまり、Main_form_1の有効なインスタンスに割り当てられていません)。

最も明白な方法はMain_form_1、Form2のインスタンスを作成するときに、現在のインスタンスを渡すことです。
たとえば、current内に、Main_form_1Form2のインスタンスを作成します。
この時点で、現在のMain_form_1の参照を渡します

 Form2 f = new Form2(this);

そしてForm2のコンストラクターで

public Form2(Main_form_1 f)
{
   form1 = f;
}

これで、Form2のインスタンスに実行中の正しい参照があり、Main_form_1の正しいインスタンスでメソッドをMain_form_1呼び出すことができます。time_refresh()

于 2012-12-20T16:11:30.333 に答える
0

フォーム2のコンストラクターで、使用するform1のインスタンスを設定することをお勧めします。

private Form1 _currentForm1;
Public Form2(Form1 currentForm1)
{
    _currentForm1 = currentForm1;
}

そしてあなたのForm1(例えばコンストラクター)で

private Form1 _thisForm1;
public Form1()
{
    _thisForm1 = this;
}

//in your method simply say
Form2 form2 = new Form2(_thisForm1)

これにより、フォーム2コードでform1のパブリックメソッドを使用できるようになります。新しいform1をインスタンス化するのに問題はありませんが、それはユーザーに表示されるフォームではありません。

于 2012-12-20T16:13:24.267 に答える
0

この問題に対処する適切な方法は、イベントを使用することです。 直接Form2アクセスするのではなく、イベントを通じて自分自身を更新する必要があることを通知するだけです。Form1Form1

Form2のようなイベントを作成します。

public Action event Refresh; //TODO rename as appropriate

次に、それ自体を更新する必要があることを知りForm2たいときはいつでも、そのイベントを発生させることができます。Form1

public void OnRefresh()  //call this method to fire the event
{
    if(Refresh != null)
        Refresh();
}

次にForm1、イベントハンドラーをアタッチできます。

Form2 other = new Form2();
other.Refresh += () => time_refresh();
other.Show();
于 2012-12-20T16:21:02.053 に答える
-1

Form1の新しいインスタンスをインスタンス化する必要があります。次のように宣言してみてください。

private Main_form_1 form1 = new Main_form_1();

そして、あなたは呼び出すことができますform1.time_refresh();

また、Form2にForm1のインスタンスを要求させることもできます。

public Main_form_1 _form1; // global variable
public Form2(Main_form_1 form1)
{
     _form1 = form1;
}

そしてそこから関数を呼び出すことができ、それは元のフォームに影響を与えるはずです。

于 2012-12-20T16:09:38.757 に答える