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); } } }
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 ?
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.
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....
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.
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.
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.
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 :-]
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 :)
Synes godt om
Ny brugerNybegynder
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.