C # WinForms проблема с рисованием изображения - PullRequest
1 голос
/ 29 марта 2010

class OriginalImage: Form {private Image image;private PictureBox pb;

    public OriginalImage()
    {
        pb = new PictureBox {SizeMode = PictureBoxSizeMode.CenterImage};
        pb.SizeMode = PictureBoxSizeMode.StretchImage;

        Controls.Add(pb);

        image = Image.FromFile(@"Image/original.jpg");

        this.Width = image.Width;
        this.Height = image.Height;

        this.Text = "Original image";
        this.Paint += new PaintEventHandler(Drawer);
    }

    public virtual void Drawer(object source, PaintEventArgs e)
    {
        Graphics g = pb.CreateGraphics();
        g.DrawImage(image,0,0);
    }

Я называю этот объект создания OriginalImage в другой форме при нажатии кнопки, но изображение не рисуется?Где проблема?

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

    private void button1_Click(object sender, EventArgs e)
    {
        var oi = new OriginalImage();
        oi.Show();
    }
}

1 Ответ

2 голосов
/ 29 марта 2010

Вы создаете PictureBox и добавляете его в свои элементы управления, но фактически никогда не используете его (вы рисуете изображение вручную в событии Paint). Зачем? Этот элемент управления, вероятно, скрывает область рисования формы, поскольку любые элементы управления идут поверх всего, что вы рисуете в событии Paint.

Кроме того, вы получаете объект Graphics, вызывая CreateGraphics на PictureBox, а не на Form. Это неправильно, так как событие Paint PictureBox будет запускать после этого кода, стирая все, что вы рисуете.

Я бы порекомендовал изменить код OriginalForm на следующий:

class OriginalImage: Form
{
    private Image image;
    private PictureBox pb;

    public OriginalImage()
    {
        pb = new PictureBox();
        pb.SizeMode = PictureBoxSizeMode.StretchImage;

        pb.Dock = DockStyle.Fill; // this will make the PictureBox occupy the
                                  // whole form

        Controls.Add(pb);

        image = Image.FromFile(@"Image/original.jpg");

        this.ClientSize = new Size(image.Width, image.Height); // this allows you to
                                                               // size the form while
                                                               // accounting for the
                                                               // border

        this.Text = "Original image";

        pb.Image = image; // use this instead of drawing it yourself.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...