Entwickler-Ecke

Sonstiges (.NET) - Paint Event


flo_eigentler - Di 20.04.10 20:40
Titel: Paint Event
hi forum,

bin noch ein ziemlicher Neuling und bin jetzt gerade beim Einlernene von C# und GDI+; zu meiner problemstellung:

ich habe eine Form in der ich zwei Images mit einem PaintEventHandler erzeuge. Jedoch verändert sich während des Programms ein Zustand, der durch ein anderes Bild ausgedrückt wird.
wie kann ich nun die alte Grafike "raussschmeißen" und sie durch die neue ersetzen???

Hier der Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
public partial class dvdLibraryLOGIN : Form
    {
        int securitystat = 0;
        int securitylock = 0;

        public dvdLibraryLOGIN()
        {
            InitializeComponent();
        }

        private void dvdLibraryLOGIN_Load(object sender, EventArgs e)
        {
            Paint += new PaintEventHandler(securityIMAGES); 
        }

        public void securityIMAGES(object sender, PaintEventArgs e)
        {
            
            Point seclockPOINT = new Point(23,60);
            Point secstatPOINT = new Point(60100);

            switch (securitylock)
            {
                case 0: Image seclock0 = new Bitmap(Properties.Resources.pic_locked);
                        e.Graphics.DrawImage(seclock0, seclockPOINT); break;

                case 1: Image seclock1 = new Bitmap(Properties.Resources.pic_unlocked);
                        e.Graphics.DrawImage(seclock1, seclockPOINT); break;
            }

            if (securitylock == 0)
            {
                switch (securitystat)
                {
                    case 0: Image secstat0 = new Bitmap(Properties.Resources.pic_secstat1);
                            e.Graphics.DrawImage(secstat0, secstatPOINT); break;

                    case 1: Image secstat1 = new Bitmap(Properties.Resources.pic_secstat2);
                            e.Graphics.DrawImage(secstat1, secstatPOINT); break;

                    case 2: Image secstat2 = new Bitmap(Properties.Resources.pic_secstat3);
                            e.Graphics.DrawImage(secstat2, secstatPOINT); break;
                }

            }      

        }

        private void button1_Click(object sender, EventArgs e)
        {
            securitylock = 1//Hier wird der Status geändert, und damit soll das Bild in der case Auswahl geändert werden??
        }

    }


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Ralf Jansen - Di 20.04.10 20:47

Wenn ich dich richtig verstanden habe macht das dein PaintEventHandler bereits oder? Dann mußt du nur dafür sorgen das in deinem Button Event nach der Statusänderung auch ein Neuzeichnen angestoßen wird. Das kannst du durch einen Aufruf der Invalidate() Methode deiner Form erreichen.


flo_eigentler - Di 20.04.10 20:55

aha!!! suppi danke

ps: kann ich das auch dezidiert für ein paint event aufrufen, oder gilt das nur für alle?)


Ralf Jansen - Di 20.04.10 21:03

Du kannst natürlich jedem einzelnen Control sagen das es sich neuzeichnen soll oder nicht. Aber da du direkt auf der Form zeichnest mußt du die Form neuzeichnen.

Du kannst aber Invalidate (schau dir doch einfach mal die Überladungen in der Hilfe an) den Bereich mitgegeben der ungültig werden soll. Dann müßtest du aber in deinem PaintEventHandler die EventArgs auswerten(insbesondere ClipRectangle) und überprüfen ob das ein Bereich der dich betrifft und du diesen im Handler selbst zeichnen möchtest.