Miért így működik ez a c#-kód? (drawing)
Egész pontosan miért nem látom a kirajzolt vonalat és amikor a négyzet újrarajzolódik akkor miért tűnik el az előtte kirajzolt négyzet?
Itt a kód:
1.: Azért nem látod a kirajzolt vonalat, mert a "Paint"-esemény rajzolja ki a dolgokat, tehát oda kell helyezned...
2.: Azért tűnik el az előző négyzet, mert te az egész panelt újrarajzolod (Refresh), és nem csak annak egy részét (Invalidate)...
Itt van egy nem befejezett, de már majdnem működő variáció:
public partial class MainForm : Form
{
private Rectangle r;
private const int rSize=50;
private Graphics g;
public MainForm()
{
InitializeComponent();
panel1.BackColor=Color.Black;
r = new Rectangle(0,panel1.Height/2-rSize/2, rSize, rSize);
g=panel1.CreateGraphics();
Pen p=new Pen(Color.White);
g.DrawLine(p,new Point(100,100), new Point(200,100));
panel1.Paint+=new PaintEventHandler(Panel1Paint);
}
void Panel1Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(Pens.White,new Point(100,100), new Point(200,100));
e.Graphics.DrawRectangle(Pens.White, r);
}
void Panel1MouseMove(object sender, MouseEventArgs e)
{
r.X=e.X;
r.Y=e.Y;
panel1.Invalidate(r);
// panel1.Refresh();
}
Ezt nem egészen értem: "Azért nem látod a kirajzolt vonalat, mert a "Paint"-esemény rajzolja ki a dolgokat"
Egy másik programba egy gombal is ki tudtam rajzolni bármit (nem kellett hozzá paint esemény):
private void RajzolButton_Click(object sender, EventArgs e)
{
Graphics g = panel1.CreateGraphics();
Pen p = new Pen(Color.Black);
int x = 0, y = 0;
int index = 2;
Point[] pontok = new Point[index];
x = 100;
y = 100;
pontok[0] = new Point(x, y);
pontok[1] = new Point(x + 100, y);
g.DrawLine(p, pontok[0], pontok[1]);
}
Jaaa bocs, nem figyeltem, hogy itt is válaszoltál, csak most vettem észre...
Nos akkor úgy fogalmazok, hogy kirajzolja a vonalat, csak mivel a Paint-esemény is létezik, így az egyből felülbírálja az előzőleg kirajzolt dolgokat, lásd Refresh...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!