- ベストアンサー
C#「オブジェクト参照が必要です」(初心者)
Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。 Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。 ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の Form1.pictureBox1.image = Image.FromFile("motion1.png"); ”Form1.pictureBox1”に当てられています。 何が原因と考えられるでしょうか。 もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
main()内に記述されているとのことですので、たぶん、 Form1.pictureBox1.Image=Image.FromFile("motion1.png"); Application.Run(new Form1()); と書いているのではないでしょうか? 連載 改訂版 C#入門 第3章 クラスとインスタンス http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302 ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。 今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。 具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。 その際、redfox63さんがおっしゃられるように this.pictureBox1 と記述することが必要です。(thisは自分自身のインスタンスを指します) 後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。 タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編) http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html MSDNライブラリ Timerクラス http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
デバッグ実行でエラーになるコード特定しその周辺のコードを投稿しましょう 他のフォームから操作するのでなければ Form1.pictureBox1と記述するより this.pictureBox1といった記述の方がいいように思います
お礼
ご回答いただき、ありがとうございました。 無事解決しました。
お礼
ご回答いただき、ありがとうございました。 ご紹介いただいたサイトも大変勉強になります。