| 
                 分類:[C#] 
   98334 に続くインスタンスの生成と破棄シリーズ第3弾です(笑)。連投恐れ入ります。
   Pb はデザイナーで貼り付けたPictureBox です。以下の@ABに対する疑問に答えていただければ幸いです。
  public partial class Form1 : Form {   Bitmap bmp;//各イベントハンドラで共有して使うためここで宣言
    private void BtnFileOpen_Click(object sender, EventArgs e)   {     OpenFileDialog dialog = new OpenFileDialog();     if (dialog.ShowDialog() == DialogResult.OK)     {       try       {         bmp = new Bitmap(dialog.FileName);         if (Pb.Image != null)         {           Pb.Image.Dispose();         }         Pb.Image = bmp;       }       catch       {         MessageBox.Show("これは画像ファイルではありません", "エラー",                 MessageBoxButtons.OK, MessageBoxIcon.Error);         return;       }     }   }
    //小さな画像を PictureBox.BackgroundImage に敷き詰める   private void BtnTile_Click(object sender, EventArgs e)   {     if (bmp.Width < 60 || bmp.Width > 120) { return; }     if (bmp.Height < 60 || bmp.Height > 120) { return; }
      Bitmap backbmp = new Bitmap(bmp.Width, bmp.Height);     Graphics g = Graphics.FromImage(backbmp); // @new はなぜ不要なのか?     g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);     Pb.Width = bmp.Width * 10;     Pb.Height = bmp.Height * 8;     Pb.BackgroundImage = backbmp;     Pb.BackgroundImageLayout = ImageLayout.Tile;     Pb.Invalidate();     g.Dispose(); //これはOKで     //backbmp.Dispose(); が実行エラーとなるのはなぜか A          /* インスタンスの破棄は C# のGCに任せればいいのだろうが、やはり気になるのでネット     を検索したら using 文で囲めば Dispose は不要とあったので、見よう見まねで以下のよ     うにコーディングしたら、あっさり実行エラー B     using (var backbmp = new Bitmap(bmp.Width, bmp.Height))     {       Graphics g = Graphics.FromImage(backbmp);       g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);       Pb.Width = bmp.Width * 10;       Pb.Height = bmp.Height * 8;       Pb.BackgroundImage = backbmp;       Pb.BackgroundImageLayout = ImageLayout.Tile;       Pb.Invalidate();     }     */   } }
 
  |