Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > OnPaint


Автор: larinva 2.9.2010, 11:04
Всем привет! момогите вот код 
Код

Form2
Image image = Image.FromFile("roze.bmp");
        public void Draw(int x, int y)
        {
            int X = x;
            int Y = y;

            Graphics g;

            g = form1.panel1.CreateGraphics();
            g.DrawImage(image, X, Y);
            g.DrawString("Роза", SystemFonts.DefaultFont,
                SystemBrushes.WindowText, new Point(X, Y));
           
        }

Добавляю Розу на Form1
Код

         private void button1_Click(object sender, EventArgs e)
        {
            Draw(0,0);
        }

Роза добавляется на Form1, но после сворачивания исчезает. Понимаю что нужно перерисовать на Form1 но не могу догнать как это сделать. Помогите плиз! smile 

Автор: gambit 2.9.2010, 11:14
invalidate();

Добавлено @ 11:15
А, не понял вопроса, сейчас напишу как надо

Добавлено @ 11:19
Если рисунок один, то надо:

Код

string s;
image i;
int X;
int Y;
public void Draw(int x, int y)
        {
            X = x;
            Y = y;
            i=Image.FromFile("roze.bmp");
            s = "Роза";
            this.invalidate();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            е.Graphics.DrawImage(i, X, Y);
            e.Graphics.DrawString(s, SystemFonts.DefaultFont, SystemBrushes.WindowText, new Point(X, Y));            
        }


Это рисуем на форме, не проблема теперь перенести на панель.
Если же объектов будет много, то заменить переменную на коллекцию.

Автор: larinva 2.9.2010, 12:18
Это вы gambit добавляете в рамках одной формы, а мне нужно по нажатию на кнопку которая расположена на form2 роза добавлялась на form1 и на ней в случае изменения перерисовывалась

Автор: gambit 2.9.2010, 12:24
larinva, а что мешает вынести
Код

string s;
image i;
int X;
int Y;

в первую форму, и обращаться к ним из второй? Это уже мелочи, главное, что ваша ошибка в том, что отрисовывать нужно в событии OnPaint, а не где то еще.

Автор: larinva 2.9.2010, 12:59
при компиляции пишет
Значение не может быть неопределенным.
Имя параметра: image
вот тут
Код

form1

        public int X { get; set; }
        public int Y { get; set; }
        public string s { get; set; }
        public Image image { get; set; }

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            е.Graphics.DrawImage(image, X, Y);
            e.Graphics.DrawString(s, SystemFonts.DefaultFont, SystemBrushes.WindowText, new Point(X, Y));            
        }

Автор: larinva 2.9.2010, 13:29
Что-то не получается у меня

Автор: larinva 2.9.2010, 14:00
я понимаю что нужно отрисовывать событие OnPaint, но как это сделать из form2 ?

Автор: gambit 2.9.2010, 14:06
Код

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            if (image!=null && !string.IsNullOrWhiteSpace(s))
            {
                e.Graphics.DrawImage(image, X, Y);
            e.Graphics.DrawString(s, SystemFonts.DefaultFont, SystemBrushes.WindowText, new Point(X, Y));
            }
        }


Добавлено через 4 минуты и 45 секунд
не смотри на имена, делал в спешке

Автор: larinva 2.9.2010, 14:20
сп-бо gambit то что нужно  smile  держи +

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)