2016-05-09 18 views
-1

現在、C#でコードを学習しています。私は、フォームのためフォームを閉じて別のファイルを開く方法

Form1.Hide(); 
Music_Menu.Show(); 

名が正しいコードを使用して、これは動作するはずと考えているが、私は、テキストにカーソルを合わせると、私はこのエラーを取得している:オブジェクト参照が非アクセスするために必要とされる

静的フィールドメンバーまたは プロパティc#

+3

'Form1 form1 = new Form1(); Form1.Hide(); '非staticメンバにアクセスするには型の' instance'が必要です –

+0

オブジェクトのメソッドを使用できるようになったら、オブジェクトを作成する必要があります。 C#はVB.Netに似ていません: 'Form1 form1 = new Form1(); Music_Menu music_Menu = new Music_Menu(); ' –

答えて

1

私は、Music_Menuがフォームのクラスの名前であると賭けています。

フォームのインスタンスを作成する必要があります。 VBはこれを「舞台裏で」行っていましたが、C#ではそれが正しいことを求めています。

Application.Run(new Form1()); 

あなたはその参照を保持する必要があります。どこかProgram.Mainで

は()、私はあなたがラインを持っていると思いますわ。 Programクラスのプライベート静的フィールドが機能するはずです。次に、(あなたが切り替わる)あなたのコードは、(Program.csの中)でなければなりません

_myForm1 = new Form1(); 
Application.Run(_myForm1); 

_myForm1.Hide(); 
_myMusic_Menu = new Music_Menu(); 
_myMusic_Menu.Show(); 

private static Form1 _myForm1; 
private static Music_Menu _myMusic_Menu; 

そして、メイン()メソッドでは、にそれを変更また、Form1でコードを実行する場合(およびForm1のインスタンスに戻ると仮定した場合:

this.Hide(); 
var myMusic_Menu = new Music_Menu(); 
myMusic.ShowDialog(); 
this.Show(); 

コンテキストに応じて調整するのにいくつかの範囲の問題があるかもしれませんが、正しい方向に進むはずです。

+0

ここには不要なスペースがあります。_myMusic_Menu .Show(); –

+0

ええ、スペーシングはどこかで乱雑になっています。それはコンパイルされます。私はSEが書いた通りにそれを受け入れる前にコードサンプルを2〜3回きれいにしなければならないようです。私は_myForm1を割り当てる際にもう一つの "欠けている"スペースがあることを知っています。 VSはまだそれをコンパイルし、あなたは簡単にそれをクリーンアップすることができます。私は編集しようとします*もう一度*。 :) –

関連する問題