@mIka01

Как рисовать в PictureBox на второй форме?

Здраствуйте, в первые работаю с Form2 и как обычно что то пошло не так.
Есть Form1 где расположены textBox-ы и кнопка button1 в которой есть код.
Form2 a = new Form2(new int[] { Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox3.Text), Convert.ToInt32(textBox4.Text), Convert.ToInt32(textBox5.Text), Convert.ToInt32(textBox6.Text), Convert.ToInt32(textBox7.Text), Convert.ToInt32(textBox8.Text), });
 a.Show();


В Form2 есть код, он находится в конструкторе. Так же на самой форме есть pictureBox1.
public Form2(int[] q)
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;
            Size size = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
            pictureBox1.Size = size;

            Graphics g = pictureBox1.CreateGraphics();
            g.Clear(System.Drawing.Color.FromArgb(q[2], q[3], q[4]));
            for (int i = 0; i < pictureBox1.Width; i += q[0])
            {
                for (int j = 0; j < pictureBox1.Height; j += q[0])
                {
                    g.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(q[5], q[6], q[7])), i, j, q[1], q[1]);
                }
            }
         }

По задумке на второй форме (Form2) должен возникать рисунок сетки.
Все работает если это все выполняется в Form1 , а в Form2 не работает.
Объясните что я не правильно делаю и если не сложно, то подскажите можно ли сделать так что бы Form2 возникала на втором мониторе.

Заранее благодарю за ответ.
  • Вопрос задан
  • 574 просмотра
Решения вопроса 1
FoggyFinder
@FoggyFinder
Удобнее всего выполнять рисование в обработчике события Paint. Если в какой-то момент нужно обновить отображение, то следует вызвать перерисовку.

Пример, на основе вашего кода

readonly int[] q;
public Form2(int[] q)
{
    InitializeComponent();
    this.q = q;
    this.WindowState = FormWindowState.Maximized;
    Size size = new Size(Screen.PrimaryScreen.WorkingArea.Width,
        Screen.PrimaryScreen.WorkingArea.Height);
    pictureBox1.Size = size;
    pictureBox1.Paint += PictureBox_Paint;
}

private void PictureBox_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.Clear(Color.FromArgb(q[2], q[3], q[4]));
    for (int i = 0; i < pictureBox1.Width; i += q[0])
    {
        for (int j = 0; j < pictureBox1.Height; j += q[0])
        {
            g.FillRectangle(new SolidBrush(Color.FromArgb(q[5], q[6], q[7])), i, j, q[1], q[1]);
        }
    }
}


Небольшой комментарий - совет не относящийся непосредственно к вопросу:

Не передавайте массив в параметрах, создайте класс со свойствами чьи названия будут отражать смысл значений и используйте его.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы