2016-09-23 4 views
-2

まず物事コードからpictureBox1内の画像を変更することはできません:イムプログラミングにはかなり新しいが、私は私の目標C#言語私はC#で最初

学ぶことをしようとしている:pictureBox1で画像を変更する方法を有します。

問題:非静的フィールドにオブジェクト参照が必要であるというエラーが表示されます。

ここでは、メソッドを実行するクラスのスニペットを示します。

private class Execute 
{ 
    private void valueChecker(char value) 
    { 
     for (int i = 0; i <= charLenght; i++) 
     { 
      if (value != CharArray[i]) 
      { 
       i++; 
      } 

      else if (value == CharArray[i]) 
      { 
       CorrectLetter(value); 
       svalue = true; 
      } 
     } 
     if (svalue == true) 
     { 
      /* This is where the command is happening. 
      But I get error message : "An object reference is required for the non-static field, method or property." 
      */ 

      pictureBox1.Image = photos[x]; 
      x++; 
     } 
    } 

} 

また、新しいクラスとメソッドをコード内に作成してif文から呼び出すことも試みましたが、これは動作しません。

svalueは==真

場合、私はイムがやって正確に何に少しさらに詳細pictureBox1で画像を変更する必要があります。 イムは練習として絞首刑執行人のゲームを作って、私は画像を更新したいです答えで入力文字が見つからない場合は、pictureBox1。

写真は写真[]と呼ばれる配列に格納されています。

+2

これがまさにコードであれば意味をなさない。このエラーは、静的メソッドで非静的メンバーにアクセスしようとした場合にのみ発生します。 –

+0

実際には、そのピクチャボックスを持つフォームクラスの中に 'Execute' *を置くと、そのエラーが出る可能性があります。 –

+0

'pictureBox1.Image'これはどこから来たのですか?クラスExecuteのプロパティですか?あなたはあなたのメソッドを以下のように呼び出します: 'Execute.valueChecker( 'q')'? –

答えて

1

あなたのメソッドの宣言は次のようなものでなければなりません:あなたのクラスはPictureBox参照を必要と

public void valueChecker(char value,PictureBox pictureBox1) 
+0

返信いただきありがとうございます!これにより、エラーが修正され、コンパイラの仕組みを理解する手がかりも得られました。 – erikths

+0

ここにキーワードは 'references'と 'scope'です。 – TaW

0
var MyImage = new Bitmap(photos[x]); 
pictureBox1.Image = (Image) MyImage ; 
+0

このコードスニペットでは、[説明を含む](http://meta.stackexchange.com/questions/114762/explain-entire-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 –

0

Execute someName = new Execute(pictureBox1); 

注:あなたは

private class Execute 
{ 
    public PictureBox pBox {get; set;} 

    public Execute(PictureBox pb) 
    { 
     pBox = pb; 
    } 

    private void valueChecker(char value) // or maybe public ?! 
    { 
     ... 
     ... 

     if (pBox != null) pBox.Image = photos[x]; 
     x++; 
    } 
} 

は次のようにクラスのインスタンスを作成します

... プロパティを追加して、クラスのインスタンスを作成した後、それを設定したり、右のコンストラクタに渡すことができますこれを解決する他の方法があります。これはむしろ直接的かつ直接的なものです。あなたのクラスが一種のサービスクラスであれば、Tarekのさらに直接的な解決策を取りに行きたいかもしれません。パラメータリストに PictureBoxを追加するだけではないことに注意してください。彼はまた、機能を publicにする。

+1

返信いただきありがとうございます!私はTarekのソリューションが働いたのであなたが答えたようにコードを書こうとしなかった。しかし、私はあなたの答えを将来の参考のために保存します。 – erikths

関連する問題