Jonas Skrevet 29. mars 2005 Del Skrevet 29. mars 2005 Heisann Jeg holder nå på å lage en stor OCX-fil og har et par events som jeg skal kalle med RaiseEvent. Ser dere sikkert vet må man bruke koden i UserControlen. Jeg må reise en events fra en modul og løsningen blir vel en Public sub i UserControlen: Public Sub RaisedDrawed(hDC As Long) RaiseEvent Drawed(hDC) End Sub Men hvordan kaller jeg den? Å skrive RaisedDrawed i en modul fungerer ikke. UserControl.RaisedDrawed fungerer heller ikke, og Engine.RaisedDrawed fungerer heller ikke! ("Engine" er navnet på usercontrolen) Hvordan kaller man subs i usercontrols? Jonas Lenke til kommentar
Richard87 Skrevet 29. mars 2005 Del Skrevet 29. mars 2005 du må deklare eventen i toppen: Public Event Drawed(hDC) og så kalle den whereever sånn RaiseEvent Drawed(hDC) (f.eks i Sub Main() eller Init Lenke til kommentar
aadnk Skrevet 29. mars 2005 Del Skrevet 29. mars 2005 Richard87, det du foreslår er rett og slett komplett umulig. Man kan simpelthen ikke kalle RaiseEvent på hendelser utenfor class-modulen Event er deklarert - og attpåtil er denne kommandoen også ulovlig i annet enn COM-objekter (Form, Class, UserControl). Man må derimot lage en funksjon innenfor UserControl'en med den korrekte RaiseEvent-kommandoen for å kjøre hendelsen. Dette kan naturligivis virke plagsomt og irriterende, idet man øyensynlig gir utenforstående også mulighet til å kjøre visse hendelser, men dette kan unngås. Dersom du deklarerer funksjoner og subber som Friend kan de kun nås innenfor prosjektet - aldri utenfor. Eksempelvis vil ikke følgende funksjon være synlig for annet enn moduler innenfor ditt prosjekt: Friend Function InvokeEvent() As String ' Code her End Function Lenke til kommentar
Jonas Skrevet 29. mars 2005 Forfatter Del Skrevet 29. mars 2005 Ser ikke ut til å fungere Friend Sub RaisedDrawed(hDC As Long) RaiseEvent Drawed(hDC) End Sub Og jeg kaller den slik "RaisedDrawed <hdc>". Får bare sub or function not defined. Lenke til kommentar
aadnk Skrevet 29. mars 2005 Del Skrevet 29. mars 2005 (endret) Friend-funksjonen må selvsagt legges inn i UserControlen. Som du allerede har sett, kan man dessverre ikke kalle en Usercontrol direkte i så måte. For å forklare årsaken, må du ta stilling til det faktum at en brukerkontroll kan befinne seg på flere former samtidig spredd ut i mange forskjellige applikasjoner - hvordan skulle da en enkel modul vite hva som skulle til hva? Løsningen er vel å deklarere en Collection i modulen og legge til og fjerne Me i Initialize og Terminate, såsom dette: Private Sub UserControl_Initialize() usrControls.Add Me End Sub Private Sub UserControl_Terminate() Dim Tell As Long For Tell = 1 To usrControls.Count ' Fjern denne brukerkontrollens forekomst i klassen If usrControls(Tell) Is Me Then ' Fjern elementet usrControls.Remove Tell ' Vi har intet mer å gjøre Exit Sub End If Next End Sub Nå må du likevel finne ut hvilket objekt som tilhører hva, men dette kan gjøres ved å bl. a. jamføre atributter og liknende. Dersom dette blir en altfor ensidig og unøyaktig løsning, kan du jo alltids se på hvordan denne karen har løst problemet: http://www.mvps.org/vbvision/Super_Collections.htm Endret 29. mars 2005 av aadnk Lenke til kommentar
aadnk Skrevet 29. mars 2005 Del Skrevet 29. mars 2005 (endret) Beklager, dobbeltpost. Endret 29. mars 2005 av aadnk Lenke til kommentar
Jonas Skrevet 30. mars 2005 Forfatter Del Skrevet 30. mars 2005 Sånn fungerer jo en form også. Hvis man lager en public "Test" går det ikke ann å skrive "Test" i feks. en modul. Man kan derimot skrive "Form1.Test". Kan man ikke løse det på samme måte med UserControls? Lenke til kommentar
kaffenils Skrevet 30. mars 2005 Del Skrevet 30. mars 2005 Her en er ActiveX-kontroll som jeg lagde for en tid siden. Den bruker events bl.a. når brukeren flytter på items i kalenderen. Det er mye kode, men du kan jo se om du får noe nyttig ut av det. Bl.a. har jeg laget en custom propertpage som lagrer flere instanser av en ColumnHeader klasse i propertypage. Det var faktisk litt arbeid å få til å lagre et objekt i peropertypage slik at objektets egenskaper ble tatt vare på. Screenshot: Activity_Calendar.zip Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå