Autor Beitrag
flo_eigentler
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 20.04.10 20:40 
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:

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.