Функция для рисования на picturebox - C#

Узнай цену своей работы

Формулировка задачи:

Подскажите как мне написать функцию чтобы при её вызове рисовалось изображение на пикчербоксе ,проблема в том ,что пишу Морской бой...щас сделал этап,где кликая по пиечербоксу,на котором сетка(10,10) рисует в клетке крест,но при рисовании следующего креста предыдущий стирается так как код креста и самого поля записан так
private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            
            Graphics gr = e.Graphics;
            Pen pen = new Pen(Color.Blue, 2);
            gr.DrawLine(pen, 0, 0, 200, 0);
            gr.DrawLine(pen, 0, 20, 200, 20);
            gr.DrawLine(pen, 0, 40, 200, 40);
            gr.DrawLine(pen, 0, 60, 200, 60);
            gr.DrawLine(pen, 0, 80, 200, 80);
            gr.DrawLine(pen, 0, 100, 200, 100);
            gr.DrawLine(pen, 0, 120, 200, 120);
            gr.DrawLine(pen, 0, 140, 200, 140);
            gr.DrawLine(pen, 0, 160, 200, 160);
            gr.DrawLine(pen, 0, 180, 200, 180);
            gr.DrawLine(pen, 0, 200, 200, 200);
            gr.DrawLine(pen, 0, 0, 0, 200);
            gr.DrawLine(pen, 20, 0, 20, 200);
            gr.DrawLine(pen, 40, 0, 40, 200);
            gr.DrawLine(pen, 60, 0, 60, 200);
            gr.DrawLine(pen, 80, 0, 80, 200);
            gr.DrawLine(pen, 100, 0, 100, 200);
            gr.DrawLine(pen, 120, 0, 120, 200);
            gr.DrawLine(pen, 140, 0, 140, 200);
            gr.DrawLine(pen, 160, 0, 160, 200);
            gr.DrawLine(pen, 180, 0, 180, 200);
            gr.DrawLine(pen, 200, 0, 200, 200);
            gr.DrawLine(pen, Convert.ToInt32(x1), Convert.ToInt32(y1), Convert.ToInt32(x1) + 20, Convert.ToInt32(y1) + 20);
            gr.DrawLine(pen, Convert.ToInt32(x1), Convert.ToInt32(y1) + 20, Convert.ToInt32(x1) + 20, Convert.ToInt32(y1));
            
        }
я понимаю что он он обновляет пикчербокс,но как сделать чтобы он дополнял а не обновлял

Решение задачи: «Функция для рисования на picturebox»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace _1921
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            bt = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            gr = Graphics.FromImage(bt);
            pictureBox1.Image = bt;
        }
        Bitmap bt; Graphics gr; Pen pn;
        private void DravGrid()
        {
            pn = new Pen(Color.Blue);
            for (int i = 0; i < pictureBox1.Width; i += 25)
                gr.DrawLine(pn, i, 0, i, pictureBox1.Height);
            for (int i = 0; i < pictureBox1.Height; i += 25)
                gr.DrawLine(pn, 0, i, pictureBox1.Width, i);
 
        }
        private void SetPoint(int x, int y)
        {
            pn = new Pen(Color.Black);
            int koll = 0;
            for (int i = 0; koll < x; i++)
                koll += 25;
            x = koll - 25;
            koll = 0;
            for (int i = 0; koll < y; i++)
                koll += 25;
            y = koll - 25;
            gr.DrawLine(pn, x, y, x + 25, y + 25);
            gr.DrawLine(pn, x + 25, y, x, y + 25);
 
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DravGrid();
            pictureBox1.Invalidate();
        }
 
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            DravGrid();
            Point pt = new Point(e.X, e.Y);
            pn = new Pen(Color.Blue);
            SetPoint(pt.X, pt.Y);
            pictureBox1.Invalidate();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы