Hogyan kell C#-ban grafikai objektumot megsemmisíteni?
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();
}
}
}
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
#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?
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!