2017-03-21 20 views
-2

私はデータベースにアクセスするためのプログラムを作成しています。エラーメッセージ "静的でないフィールド、メソッド、またはプロパティにオブジェクト参照が必要です。"

私の問題を引き起こしているコードは、ボタンを押したときに新しいフォームを開くためのものです。次に、メインフォームのリストボックスで選択した値に基づいてデータを取得し、そのデータをテキストボックスとラベルに配置するために2番目のフォームに送信する必要があります。

私が持っている問題は、「...オブジェクト参照が非静的フィールド、メソッドやプロパティのために必要とされる」ために、コードが

はエラーをスローせずに実行するためということ

です

私はセカンダリフォームのメソッドを静的にする必要があります。しかし、これは私が二次フォーム上のコントロールにアクセスすることを妨げる。

メインフォームコードスニペット:

private void MemView_Click(object sender, EventArgs e) 
    { 
     string selected = lstMember.SelectedItems[0].Text; 
     //MessageBox.Show(selected); 
     string[] data = P.selectMem(selected); 
     MessageBox.Show(data[0]); 

     MemForm mem = new MemForm(); //How to open a designed form 

     mem.Show(); //Displays the addmem form 

     MemForm.getData(data); 

    } 

セカンダリフォームコードスニペット:

public void getData(string[] Data) 
    { 
     int index = 0; 
     bool loop = false; 
     string text; 

     while (loop == true) 
     { 
      if (index < 10) 
      { text = "tb0" + index.ToString(); } 
      else 
      { text = "tb" + index.ToString(); } 

      index = index + 1; 
     } 


    } 

私の第二のコードスニペット私がすることなく、テキストボックスにすべてのデータを埋めるためにループを使用することを意味しています手動で各tb00.Text = data []などを書き出します。 C#のFindControls()メソッドにアクセスすることができません。これは、おそらく静的メソッドが必要なためです。 メインフォームで使用されるPクラスがSQLコードを実行し、完全に動作しています。

私は答えのための十分な情報を提供しようとしましたが、もっと多くの情報が必要な場合は、私が試してコメントをお願いします。 :)

+0

デフォルトの文字列タイプの問題ではありませんか? 'string text;を' string text = String.Empty; 'に変更するとどうなりますか? –

+2

メソッドを静的クラスメソッドとして呼び出すことになります。それをインスタンスメソッドとして呼び出す: 'mem.getData(data);'。フォローアップの問題が発生する可能性がありますが、一度に1つのステップを取る。 –

+0

@ Phil P.それは解決しない、私はそれが簡単だったと思います。このエラーはGetData()メソッドが静的ではないために発生しますが、メソッドを静的メソッドに変更すると、MemFormのコントロールにアクセスできなくなります。 –

答えて

0

MemFormgetData()が非静的メソッドの場合は、それを使用するにはMemFormのインスタンスが必要です。あなたは1つを持っています:MemForm mem = new MemForm();MemFormのインスタンスであるmemオブジェクトを使用してください。

mem.getData(data); 
+0

ありがとうございました。スティーン、これが問題だった。私の代わりに愚かな間違いのビット:) –

関連する問題