
[code]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using System.Net;
    using System.Drawing;
    
    namespace WindowsFormsApplication1
    {
        static class Program
        {
    
            /// <summary>
            /// アプリケーションのメイン エントリ ポイントです。
            /// </summary>
            [STAThread]
            static void Main()
            {
    
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
    
                string URL = "http://www.example.jp/images/banana_i01.jpg";
                string path = Path.GetTempFileName();
    
                WebClient client = new WebClient();
                client.DownloadFile(URL, path);
    
                string oldPath = path;
                string newPath = Path.ChangeExtension(oldPath, ".jpg");
    
                File.Move(oldPath, newPath);
    
                Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    
                Graphics g = Graphics.FromImage(canvas);
    
                Image img = Image.FromFile(newPath);
                g.DrawImage(img, 10, 20, img.Width, img.Height);
                img.Dispose();
    
                g.Dispose();
    
                pictureBox1.Image = canvas;
    
    
            }
        }
    }
    
[/code]

C#初心者です。

画像をURLからDLしてダイアログに表示させるプログラムを書こうとしています。

しかし、名前'pictureBox1'は現在のコンテキスト内に存在しませんと表示されてしまいます。

その原因として何が考えられるでしょうか？

ご教授頂けるとありがたいです。


CC BY-SA 3.0
2015-11-09T06:44:43.937
18565
2016-02-07T13:59:12.260
2015-11-09T06:51:48.173
4236
13185
question
c#
C# 「名前'pictureBox1'は現在のコンテキスト内に存在しません。」


[Application.Run()メソッド](https://msdn.microsoft.com/ja-
jp/library/ms157902\(v=vs.110\).aspx)のドキュメントには

> 現在のスレッドで標準のアプリケーション メッセージ ループの実行を開始し、指定したフォームを表示します。

までしか書かれていませんが、実際にはフォームを表示し、そのフォームが閉じられるまで返ってきません。つまり次の行に進んだ時点ではフォームが閉じられた後です。

追加したコードは本来、いつ実行することを想定されていますか？ （例えばボタンを押された時など。） 適切な場所に記述する必要があります。


CC BY-SA 3.0
2015-11-09T07:17:29.690
18566
2015-11-09T07:17:29.690
4236
18565
answer


参考にしたソースコードを貼り付ける場所が間違っています。  
PictureBoxを配置したフォームに貼り付ける必要があります。

  1. 新規プロジェクト作成（C# Windows フォームアプリケーション）
  2. ソリューションエクスプローラから **Form1.cs** をダブルクリックしてデザイン画面を開く
  3. ツールボックスから **PictureBox** を探し、フォーム画面にドラッグアンドドロップして配置
  4. デザイン画面のフォームを右クリックして **コードの表示** を押す
  5. **InitializeComponent();** の次の行移行にコピペしたコードを貼り付け
  6. 実行するとエラーしますが **波線** の箇所は _右クリック⇒競合の解決⇒1つめを選択_ で大体解決するでしょう
  7. 実行(F5)するとフォームが表示され、フォーム上のPictureBoxに画像が表示されます

参考にされたサイトをよく読めば _フォームにPictureBoxを配置してから～_ といった記述があるのではないでしょうか？

まだ右も左も分からないように見受けられますので簡単な参考書を購入して一通りやってみることをおすすめします。


CC BY-SA 3.0
2015-11-09T10:43:49.987
18575
2015-11-09T10:43:49.987
4850
18565
answer