Kezdőoldal » Számítástechnika » Programozás » Hogyan kell C#-ban grafikai...

Progizo kérdése:

Hogyan kell C#-ban grafikai objektumot megsemmisíteni?

Figyelt kérdés
Gombokat, rajzokat már létre tudok hozni, de hogyan kell ezeket eltüntetni, ha már nincs rájuk szükség? Bújom ezügyben a világhálót és a könyveket, de egyszerűen nem értem, hogy a destruktorok hogy működnek, mert alig írnak róluk. Addig rendben, hogy egy konzolos alkalmazásnál egy kiírt betű helyére szóközt rakok, de grafikus programnál a törlés a képernyőről és a memóriából hogy működik? Ha nem túl bonyolult, leírná valaki? SharpDevelop-ot használok a programhmoz.

2017. okt. 15. 16:18
1 2
 1/11 anonim ***** válasza:
2017. okt. 15. 16:20
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:
#1.: Köszi; ezen a Dispose() függvényen és leírásán átrágom magam :-)
2017. okt. 15. 17:10
 3/11 A kérdező kommentje:

De hová kell rakni a Dispose()-t? Vagy az csak osztályokra (class) érvényes? Én akárhol hívom meg a new-val létrehozott téglalap megsemmisítésére, mindig hibaüzenetet kapok. Itt a kódom:


using System;

using System.Collections.Generic;

using System.Drawing;

using System.Windows.Forms;


namespace kisjatek

{


public partial class MainForm : Form

{

private int xhely=50;

private int yhely=50;

Boolean jobbranyil=false;

Boolean balranyil=false;

Boolean felnyil=false;

Boolean lenyil=false;

Boolean teglalaptorol=false;

Rectangle teglalap;

public MainForm()

{


InitializeComponent();

Paint += new PaintEventHandler(Rajzol);

KeyDown += new KeyEventHandler(gombnyomas);

teglalap=new Rectangle(xhely,yhely,100,100);

/*„System.Drawing.Rectangle” nem tartalmazza a(z) „Dispose” metódus definícióját, és nem található olyan „Dispose” kiterjesztésmetódus, amely „System.Drawing.Rectangle” típusú első argumentumot fogad el (esetleg hiányzik egy „using” direktíva vagy egy szerelvényre mutató hivatkozás). (CS1061)*/

if (teglalaptorol==true)

{

teglalap.Dispose();

}

}


void Rajzol(object sender, PaintEventArgs e)

{

teglalap.X=xhely;

teglalap.Y=yhely;

e.Graphics.FillRectangle(Brushes.BlueViolet,teglalap);

}


void gombnyomas(object sender, KeyEventArgs e)

{

if (e.KeyCode==Keys.Left)

{

balranyil=true;

}

if (e.KeyCode==Keys.Right)

{

jobbranyil=true;

}

if (e.KeyCode==Keys.Up)

{

felnyil=true;

}

if (e.KeyCode==Keys.Down)

{

lenyil=true;

}

if (e.KeyCode==Keys.Enter)

{

teglalaptorol=true;

}

iranyvaltas(sender, e);

}


void gombfelengedes(object sender, KeyEventArgs e)

{

if (e.KeyCode==Keys.Left)

{

balranyil=false;

}

if (e.KeyCode==Keys.Right)

{

jobbranyil=false;

}

if (e.KeyCode==Keys.Up)

{

felnyil=false;

}

if (e.KeyCode==Keys.Down)

{

lenyil=false;

}

iranyvaltas(sender, e);

}


void iranyvaltas(object sender, EventArgs e)

{

if (jobbranyil==true)

{

xhely+=5;

}

if (balranyil==true)

{

xhely-=5;

}

if (felnyil==true)

{

yhely-=5;

}

if (lenyil==true)

{

yhely+=5;

}

Invalidate();

}

}


}

2017. okt. 17. 11:18
 4/11 anonim ***** válasza:
Dispose()-t olyan objektumon tudsz hívni, ami megvalósítja az IDisposable interface-t.
2017. okt. 17. 16:49
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:
#4.: Hmmm, és egyáltalán objektumot hoztam én létre azzal, hogy a new-val egy új téglalap leírását valósítottam meg?
2017. okt. 18. 09:51
 6/11 anonim ***** válasza:
Hát, C#-ban nem nagyon tudsz mást létrehozni, merthogy MINDEN objektum.
2017. okt. 18. 10:29
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

Azt mondjuk nem nagyon értem, hogy a konstruktorban mit akartál a Dispose-zal.

Általánosságban 3 dolgot kell csinálnod, ha egy grafikai elemet el akarsz távolítani:

1. Leszedni a formról

2. Dispose()-t hívni rá (ha kell/lehet)

3. Leszedni róla minden referenciát, hogy a GC begyűjthesse

2017. okt. 18. 10:37
Hasznos számodra ez a válasz?
 8/11 A kérdező kommentje:

#7.: "Azt mondjuk nem nagyon értem, hogy a konstruktorban mit akartál a Dispose-zal."


Akkor a Dispose() csak olyan metódusból/utasításból hívható, ami a MainForm()-on kívül van, vagy mit rontottam el a helyével?

2017. okt. 18. 11:16
 9/11 anonim ***** válasza:
A Dispose bárhonnan hívható (egy egyszerű függvény), csak nem tudom mi értelme annak, hogy létrehozod, majd azonnal felszabadítod.
2017. okt. 18. 11:51
Hasznos számodra ez a válasz?
 10/11 A kérdező kommentje:
#9.: Nem azonnal, hanem a feltétel teljesülése esetén. De amikor a gombnyomáshoz tettem közvetlenül, akkor is hibaüzenetet kaptam :-(
2017. okt. 18. 14:02
1 2

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!