Nižšie uvedený kód nebude fungovať bez ohľadu na to, koľkokrát stlačím tlačidlo, je to naozaj nepríjemné
private void button2_Click(object sender, EventArgs e)
{
Bitmap screen = new Bitmap(600, 800);
Graphics gfx = Graphics.FromImage(screen);
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 0));
gfx.FillRectangle(brush, 0, 0, 600, 800);
gfx.Dispose();
brush.Dispose();
screen.Dispose();
}
odpovede:
0 pre odpoveď č. 1Nemali ste nikdy kresliť bitmapu na obrazovku. Môžete to urobiť takto:
private void button2_Click(object sender, EventArgs e)
{
Bitmap screen = new Bitmap(600, 800);
Graphics gfx = Graphics.FromImage(screen);
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 0));
gfx.FillRectangle(brush, 0, 0, 600, 800);
CreateGraphics().DrawImage(screen, 0, 0);
gfx.Dispose();
brush.Dispose();
screen.Dispose();
}
Nemali by ste to však používať, pretože zabraňujú optimálnemu fungovaniu systému DoubleBuffering a zmeny sa vymažú vždy, keď sa aktivuje udalosť farby, a preto nie je správna prax.
Namiesto toho by ste mali spracovať udalosť Paint (Úlohy)choďte k dizajnérovi (stlačte kláves F7 v kóde za ním), vyberte formulár, otvorte okno vlastností (stlačte kláves F4), vyberte kartu udalostí (kliknite na blesk) a dvakrát kliknite do poľa vpravo. maľovať):
private void Form1_Paint(object sender, PaintEventArgs e)
{
Bitmap screen = new Bitmap(600, 800);
Graphics gfx = Graphics.FromImage(screen);
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 0));
gfx.FillRectangle(brush, 0, 0, 600, 800);
e.Graphics.DrawImage(screen, 0, 0);
gfx.Dispose();
brush.Dispose();
screen.Dispose();
}
Neodporúča sa však použiť bitmapu v tomto prípade, pretože sa nezobrazuje veľa. Namiesto toho by ste mali priamo kresliť grafiku formulára:
private void Form1_Paint(object sender, PaintEventArgs e)
{
using (var gfx = e.Graphics)
using (var brush = new SolidBrush(Color.FromArgb(255, 255, 0)))
gfx.FillRectangle(brush, 0, 0, 600, 800);
}
Môžete si všimnúť, že som použil using
, čo je dobrá prax, pretože automaticky likviduje objekty.
Teraz všetko, čo musíte urobiť (musíte to urobiť pre obe riešenia vrátane spracovania udalosti paint) je volať Invalidate()
vo vašom tlačidle kliknite na udalosť a nastavte vlastnosť, ktorá povie metóde farby, že sa volá, pretože sa stlačilo tlačidlo:
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (!_button2Pressed)
return;
using (var gfx = e.Graphics)
using (var brush = new SolidBrush(Color.FromArgb(255, 255, 0)))
gfx.FillRectangle(brush, 0, 0, 600, 800);
_button2Pressed = false;
}
private void button2_Click(object sender, EventArgs e)
{
_button2Pressed = true;
Invalidate();
}
private bool _button2Pressed;
To by malo robiť.