WinForms - Как запустить функцию с PaintEventArgs, когда форма загружена? - PullRequest
2 голосов
/ 05 мая 2019

Я пытаюсь понять графику, и в документации Graphics.FromImage это имеет в качестве примера:

private void FromImageImage(PaintEventArgs e)
{

    // Create image.
    Image imageFile = Image.FromFile("SampImag.jpg");

    // Create graphics object for alteration.
    Graphics newGraphics = Graphics.FromImage(imageFile);

    // Alter image.
    newGraphics.FillRectangle(new SolidBrush(Color.Black), 100, 50, 100, 100);

    // Draw image to screen.
    e.Graphics.DrawImage(imageFile, new PointF(0.0F, 0.0F));

    // Dispose of graphics object.
    newGraphics.Dispose();
}

Я новичок в C # и Windows Forms и пытаюсь понять, как все это сочетается. Как выполняется этот код, скажем, при первой загрузке формы или при нажатии кнопки?

1 Ответ

1 голос
/ 05 мая 2019

Может быть, это поможет.У меня есть пример как рисования событий Paint, так и рисования поверх существующего Image.Я создал форму с двумя картинными коробками.По одному на каждый случай.pictureBox1 имеет обработчик события .Paint, а pictureBox2 отображается только при нажатии кнопки.

form design

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        pictureBox1.BackColor=Color.Black;
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        // The code below will draw on the surface of pictureBox1
        // It gets triggered automatically by Windows, or by
        // calling .Invalidate() or .Refresh() on the picture box.
        DrawGraphics(e.Graphics, pictureBox1.ClientRectangle);
    }

    private void toolStripButton1_Click(object sender, EventArgs e)
    {
        // The code below will draw on an existing image shown in pictureBox2
        var img = new Bitmap(pictureBox2.Image);
        var g = Graphics.FromImage(img);

        DrawGraphics(g, pictureBox2.ClientRectangle);
        pictureBox2.Image=img;
    }

    void DrawGraphics(Graphics g, Rectangle target)
    {
        // draw a red rectangle around the moon 
        g.DrawRectangle(Pens.Red, 130, 69, 8, 8);
    }
}

Таким образом, когда вы запускаете приложение, красный прямоугольник появляется только слева, потому что кнопка еще не была нажата.

before click

, и когда кнопка нажата, красный прямоугольник появляется сверху изображения, отображаемого в pictureBox2.

after click

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...