C # проблема рисования - PullRequest
       18

C # проблема рисования

0 голосов
/ 18 февраля 2011

У меня есть общий вопрос о рисовании в C #.В классе Test у меня есть метод Draw:

public void Draw(Graphics g)
    {
        g.DrawLine(Pens.Black, x1, y1, x2, y2);
    }

И теперь я хочу нарисовать его в моей основной форме в Picturebox с именем PictureBox1

Но как я могу его нарисовать?

Обычно вы можете рисовать в графическом окне примерно так:

private void Draw()
{
   Graphics g = PictureBox1.CreateGraphics();
   g.DrawLine(Pens.Black, x1, y1, x2, y2);
}

Я знаю, что это глупый вопрос, но я новичок и хочу получить основы;)

наилучшие пожелания:)

РЕДАКТИРОВАТЬ:

Извините, я вообще не понимаю ваши сообщения, вы можете мне это объяснить еще раз

РЕДАКТИРОВАТЬ 2:

Спасибо за ваши ответы.Но я не знаю, как это работает.

Есть мой класс Тест , и в этом классе есть метод Draw:

private void Draw()
{
   Graphics g = PictureBox1.CreateGraphics();
   g.DrawLine(Pens.Black, x1, y1, x2, y2);
}

Теперь я хочунарисовать этот метод в моем PictureBox, который находится в моем MainClass FormMain

как я могу нарисовать test.Draw () в моем Picturbox, который находится в другом классе?

Iнадеюсь теперь понятно и извините за неопытность наилучшие пожелания

Ответы [ 4 ]

2 голосов
/ 18 февраля 2011

Элемент управления Picturebox будет перезаписывать все, что находится на нем, каждый раз, когда происходит событие рисования (что происходит почти всегда).Так что вам нужно подключиться к этому событию:

this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);

Затем в этом случае сделайте ваш рисунок:

void pictureBox1_Paint(object sender, PaintEventArgs e)
{
     // Assuming your constructor takes coordinates as parameters
     var t = new Test(0, 0, 100, 100);
     t.Draw(e.Graphics);
}
0 голосов
/ 18 февраля 2011

Элемент управления PictureBox предназначен для хранения изображения внутри.Что вам нужно сделать, это нарисовать это изображение, тогда вам не придется связываться с событиями рисования.Вот так:

var img = new Bitmap();
using (Graphics g = Graphics.FromImage(img)) {
    g.DrawLine(Pens.Black, x1, y1, x2, y2);
}
pictureBox1.Image = img;
0 голосов
/ 18 февраля 2011

Есть несколько способов сделать это:

  1. Вы можете создать событие в своем классе Test и подписаться на событие в своей форме.Затем вы можете без проблем вызвать PictureBox1.CreateGraphics ().
  2. Вы можете передать текущий экземпляр вашей формы методу в вашем классе Test и обратиться к PictureBox через экземпляр, который вы передали методу.
0 голосов
/ 18 февраля 2011

Вы должны создать объект Graphics из объекта Control.

Например:

override void myControl OnPaint (PaintEventArgs e)
{
    Graphics g = e.Graphics

    //do something with g
}

Возможно, я смогу предоставить более точную информацию с небольшим руководством почто вы ожидаете от выполнения пользовательского класса Test.

...