using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Моделирование_лаба1
{
public partial class Form1 : Form
{
Image My_Image = Image.FromFile("C:\\Documents and Settings\\Сергей\\Мои документы\\Visual Studio 2005\\Projects\\Моделирование_лаба1\\
Моделирование_лаба1\\Bitmap3.bmp");
Graphics k;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
k.DrawLine(new Pen(Color.Red), 100, 300, 400, 150);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
k = this.CreateGraphics();
k.DrawImage(My_Image, 10, 10);
}
}
}
Прорисовка одного элемента поверх другого
Народ, подскажите, что делать. В общем у меня есть объект Image, из которого берется картинка, и рисуется на форме. Мне нужно, чтобы при нажатии на кнопку рисовалась линия, причём поверх картинки. Линия рисуется, но только вот как сделать так, чтобы она рисовалась именно поверх картинки? Как только курсор выходит за пределы кнопки, часть линии исчезает.
Код:
public partial class Form1 : Form
{
Image My_Image = Image.FromFile("C:\\Documents and Settings\\Сергей\\Мои документы\\Visual Studio 2005\\Projects\\Моделирование_лаба1\\
Моделирование_лаба1\\Bitmap3.bmp");
Graphics k;
bool bDrawLine;
public Form1()
{
InitializeComponent();
this.k = this.CreateGraphics();
this.bDrawLine = false;
}
private void button1_Click(object sender, EventArgs e)
{
bDrawLine = true;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
k.DrawImage(My_Image, 10, 10);
if (bDrawLine)
k.DrawLine(new Pen(Color.Red), 100, 300, 400, 150);
}
}
{
Image My_Image = Image.FromFile("C:\\Documents and Settings\\Сергей\\Мои документы\\Visual Studio 2005\\Projects\\Моделирование_лаба1\\
Моделирование_лаба1\\Bitmap3.bmp");
Graphics k;
bool bDrawLine;
public Form1()
{
InitializeComponent();
this.k = this.CreateGraphics();
this.bDrawLine = false;
}
private void button1_Click(object sender, EventArgs e)
{
bDrawLine = true;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
k.DrawImage(My_Image, 10, 10);
if (bDrawLine)
k.DrawLine(new Pen(Color.Red), 100, 300, 400, 150);
}
}
В событии Paint параметр типа PaintEventArgs содержит ссылку на Graphics, который нуждается в перерисовке. Его и следует использовать:
Код:
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(My_Image, 10, 10);
if (bDrawLine)
e.Graphics.DrawLine(Pens.Red, 100, 300, 400, 150);
}
{
e.Graphics.DrawImage(My_Image, 10, 10);
if (bDrawLine)
e.Graphics.DrawLine(Pens.Red, 100, 300, 400, 150);
}
Ну и поворчу напоследок.
k - чрезвычайно неудачное имя переменной. Оно ни о чём не говорит.
bDrawLine - тоже не совсем удачно. Венгерская нотация в наше время? И это имя тоже мало говорит о назначении переменной.
koodeer, согласен на 100%, я просто постарался по максимуму сохранить код ТС, чтобы лучше выделить, в чем конкретно его ошибка. А так - разумеется, вы правы.
Понял, спасибо