Avatar billede koppelgaard Praktikant
28. oktober 2007 - 15:29 Der er 10 kommentarer og
2 løsninger

Event for nyt billede i Imagebox

Der må kunne rejses en event, når billedet i en imagebox ændres.
Hvad hedder den mon ?
Avatar billede bvli Praktikant
28. oktober 2007 - 18:16 #1
Det ser egentlig ikke lige ud til det.. Enten kan du vælge at loade det asynkront og lytte til ImageLoaded event'et. Ellers kan du måske implementere din egen image class, hvor du rejser eventet..

  class CustomPictureBox : System.Windows.Forms.PictureBox {

        public event EventHandler ImageChanged;

        public new Image Image {
            get {
                return base.Image;
            }
            set {
                if (value != Image) {
                    base.Image = value;
                    OnImageChanged(EventArgs.Empty);
                }
            }
        }

        protected void OnImageChanged(EventArgs e) {
            if (ImageChanged != null) {
                ImageChanged(this, e);
            }
        }
    }

/B
Avatar billede koppelgaard Praktikant
28. oktober 2007 - 21:53 #2
1000 tak for svaret !
Jeg er så godt hjemme i C#, så hvordan bruger jeg din stump kode.
Skal jeg på en eller anden måde lade mine picturebokse arve fra din klasse ?
Avatar billede bvli Praktikant
29. oktober 2007 - 08:12 #3
Hej igen.

Ja, sorry det blev nok lidt forvirrende, da jeg vist kom til at skrive, at du skulle implementere din egen Image class. Jeg mente selvfølgelig PictureBox class.

Du burde bare kunne lave en ny klasse i Visual Studio, og så kopiere den kode jeg skrev ovenfor ind i den. Når du har build'et dit projekt efterfølgende, vil den nye PictureBox dukke op på din Toolbar. Den kan du så bare trække over på din form, og den vil opføre sig som en almindelig PictureBox - men også stille event'et "ImageChanged" til rådighed.

/B :)
Avatar billede koppelgaard Praktikant
29. oktober 2007 - 11:09 #4
Tak for svaret!! Det må jeg prøve i min frokostpause eller når jeg kommer hjem i aften.
Avatar billede lasserasch Juniormester
29. oktober 2007 - 13:26 #5
bvli, du mener vel at han skal lave et nyt usercontrol og ikke kun en klasse.

Man kunne godt nøjes med en ny klasse, men så ville man ikke kunne bruge designeren til at lægge en picturebox på formen. Den ville tage System.Windows.Forms.Picturebox uden mulighed for at bruge det nye event.

Derfor ville jeg da klart lave et usercontrol og bruge dette i stedet.

Dette usercontrol nedarver alt fra System.Windows.forms.PictureBox og har derudover så også sine egne metoder/events ect.

Og bare for at gøre det klart, hvis nogle skulle være i tvivl :

Når bvli skriver således :

public new Image Image {
            get {
                return base.Image;
            }
            set {
                if (value != Image) {
                    base.Image = value;
                    OnImageChanged(EventArgs.Empty);
                }
            }
        }

så er det fordi Image jo allerede findes for en picturebox.
Den overstyrer vi så, og kan derfor i Set fyre eventet af.

Bare lige hvis nogle skulle være i tvivl om hvad der sker....

/Lasse
/Lasse
Avatar billede bvli Praktikant
29. oktober 2007 - 13:56 #6
Næh.. PictureBox arver fra Control, klasser der implementerer Contorl lægges automatisk i toolbar'en når du builder dit projekt. Derfor vil "CustomPictureBox" også dukke op på Toolbar'en når man rebuilder sin solution.

Men det er klart, at det selvfølgelig er en "CustomPictureBox" man skal dragge ud på sin form - og ikke den normale System.Windows.Forms.PictureBox.

I øvrigt vil jeg erkende, at det er vildt dårlig stil at "new'e" en property fra en eksisterende klasse, som vi gør ovenfor. Man bør jo reelt kun override virtuelle members. Anyway - det var en quick'n'dirty løsning.

/B :)
Avatar billede koppelgaard Praktikant
29. oktober 2007 - 15:11 #7
mens eksperterne slås om svaret er jeg ikke helt med. Hvordan vil du da gøre Lasse ?
Avatar billede lasserasch Juniormester
29. oktober 2007 - 15:21 #8
Jeg ville lave et usercontrol, men det er rigtig nok som bvli siger, den custom usercontrol bliver hæftet på toolbaren ved build.

Ville dog lave et usercontrol, for på den måde at slippe for at kode det for hvert eneste program. Selvom jeg godt ved det er rimelig lidt kodning der skal til.

/Lasse
Avatar billede bvli Praktikant
29. oktober 2007 - 15:47 #9
Arj.. En UserControl laver man, hvis man skal lave en control som er en "composite" af flere controls. Eksemplet ovenfor er da et udmærket eksempel på kodegenbrug - reelt dét som objektorienteret programmering handler om. (imho)

Der er intet i verden der forhindrer dig i at genbruge den nye CustomPictureBox-klasse i andre programmer. Selvfølgelig skal du så lægge den i et eller andet class-library, som du sikkert også ville gøre med din UserControl.

Anyway - Koppelgaard - hvis du bare skal have det til at fungere, så højreklik på dit projekt i SolutionExplorer'en - vælg "Add Class" og kald den "CustomPictureBox" - Slet alt mellem Namespace-klammerne, og indsæt koden du fik i det tidligere indlæg - compilér projeketet, og tilføj så den "CustomPictureBox" du har fået på din toolbar til din form.

/B :)
Avatar billede koppelgaard Praktikant
29. oktober 2007 - 16:44 #10
ok
Avatar billede koppelgaard Praktikant
29. oktober 2007 - 22:20 #11
Jeg må indrømme min energi er brugt for i dag. SÅ jeg når ikke at prøve din løsning bvli.
Hvor skal jeg iøvrigt lægger min kode, som skal køres når eventen sker?
Og sender du et svar Bvli? Jeg synes at 15 til deling er for lidt. 30 til hver må være mere  passende. Så når du har sendt dit svar, fyrer jeg pointene af.
Michael. Kald mig foresten hellere Michael.
Jeg føler mig som en gammel stiv herre, når jeg bliver kaldt Koppelgaaard :-]
Avatar billede bvli Praktikant
31. oktober 2007 - 10:43 #12
Hej Michael.

Du lægger din kode der skal afvikikles når eventen sker, i den komponent der lytter til ImageChanged-eventen. På fuldstændig samme måde, som du gør, når du laver en button_click handler f.eks.

/B :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester