• PictureBoxの画像に対し描画して内容は非破壊にする方法(Paintイベントを利用)
       private void pictureBox1_Paint(object sender, PaintEventArgs e)
       {
           if (checkBox1.Checked)
           {
               Pen pen = new Pen(penColor, 1);
               pen.DashStyle = DashStyle.Dash;
               //(重要:非破壊的)pictureBoxの場合イベントアライメントからGraphicsを取ってくるとCGデータの参照渡しにはならない
               e.Graphics.DrawRectangle(pen, 10, 20, 100, 80);
               pen.Dispose();
               e.Dispose();
           }
       }

  • パラメータでGraphicsを受け取って破線でグリッドを描く
       private void DrawGrid(Graphics graphics)
       {
           if (((Grid)comboBox1.SelectedItem) != null)     //応急手当。本当はListBoxを使うべきだった
           {
               int x, y;
               int gridSize = ((Grid)comboBox1.SelectedItem).GridSize;
               RectangleF clipBounds = graphics.VisibleClipBounds;
               x = (int)clipBounds.Right / gridSize;
               y = (int)clipBounds.Bottom / gridSize;
               Pen pen = new Pen(Color.FromArgb(127, Color.White), 1);
               pen.DashStyle = DashStyle.Dot;
               for (int i = 0; i < x + 1; i++) { graphics.DrawLine(pen, i * gridSize, 0, i * gridSize, clipBounds.Bottom); }
               for (int i = 0; i < y + 1; i++) { graphics.DrawLine(pen, 0, i * gridSize, clipBounds.Right, i * gridSize); }
           }
           else
               comboBox1.SelectedIndex = 1;
       }
最終更新:2012年09月06日 16:45