Kezdőoldal » Számítástechnika » Programozás » Miért így működik ez a c#-kód?...

Miért így működik ez a c#-kód? (drawing)

Figyelt kérdés

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:

[link]



2015. aug. 5. 19:28
 1/5 anonim ***** válasza:
http://pastebinPONTcom/XeFwyNuP
2015. aug. 5. 20:15
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
48%

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();

}

2015. aug. 5. 20:21
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

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]);

}

2015. aug. 5. 23:44
 4/5 anonim ***** válasza:

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...

2015. aug. 6. 11:12
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Igen de már az előtt se látszik a vonal mielőtt a refresh függvény lefutna.
2015. aug. 6. 11:43

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!