21. februar 2003 - 16:42Der er
13 kommentarer og 1 løsning
Form og Control
Hej,
Jeg har lavet et program i C# .NET til talegenkendelse, der benytter en Control jeg også selv har lavet.. men hvordan kalder man en funktion i Formen fra Controlen?
(Er ny med .NET :=) )
Jeg har en form namespace = VoiceApp class = public class Control : System.Object i denne er der en funktion public void RecoContext_Recognition( int StreamNumber, object StreamPosition, SpeechLib.SpeechRecognitionType RecognitionType, SpeechLib.ISpeechRecoResult Result)
denne funktion vil jeg så kalde fra Controllen (skal udføres hver gang en sætning er genkendt)..
Control'en: namespace = Speech class = public class Control : System.Object i denne bruger jeg funktionen InitializeSpeech() til at kommunikere med formen: public void InitializeSpeech()
--------
Jeg bruger følgende funktion: objRecoContext.Recognition += new SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler(Her vil jeg kalde Formen);
jeg har prøvet på to måder: objRecoContext.Recognition += new SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler(VoiceApp.VoiceForm.RecoContext_Recognition); På denne måde får jeg en compile fejl om at jeg skal bruge en object reference.
Den anden måde er følgende: VoiceApp.VoiceForm objForm = new VoiceApp.VoiceForm(); objRecoContext.Recognition += new SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler(objForm.RecoContext_Recognition); Ved denne metode får jeg ingen compile error.. men når jeg kører programmet bruger computeren utrolig meget CPU, og formen vises ikke :(
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
erm... det er da ikke særlig fedt at gøre ens klasse afhængig af en funktion som er på den form der skal bruge kontrollen ? kan du ikke smide funktionen ind i din klasse?
forresten.. hvis det er en kontrol du har lavet, hvorfor arver du så fra SYstem.Object og ikke fra System.Widows.Form.Controls ?
Ups.. my bad :) det er self. System.Widows.Form.Controls...
men tilbage til problemet.. Controllen kan stadig bruges i alle applikationer, den funtion, der er i form-class-funktionen er blot det, der skal gøres når en sætning bliver genkendt..
Det det går ud på i store træk (eller det jeg ikke kan finde ud af) er hvordan man bruger en funktion i en anden klasse uden at lave en "object referance" (altså med "new" operatoren)..
Eks:
namespace fisk {
public class fisk_class1 { public void fisk_function1 { // do something...
} }
public class fisk_class2 { public void fisk_function2 { // Altså på en anden måde en dette: fisk.fisk_class1 objFisk = new fisk.fisk_class1(); objFisk.fisk_function1(); } }
uhh... det lyder nice, men er det ikke noget med at man ikke kan kalde en static funktion fra en ikke static funktion?
Jeg får en masse fejlmeddelser på f.eks.: this.domainUpDown1.Text = "Computer Test Speech"; --> Keyword this is not a static property, static method or static field initializer
Det er noget jeg udfører i funktionen "fisk_function1"..
nej.. altså... en static funktion kræver, at ingen af de ting der bliver brugt i den er en del af en instans af objectet.
Hvis du tænker dig om engang, så vil du også finde ud af at det ikke giver mening at hente teksten fra en f.eks. textbox der ikke findes ;) du skal tænke på din klasse som en slags skabelon, og med mindre din funktion/variabel er static, så findes funktionen/variablen kun i hukommelsen når du opretter en instans af klassen.
Grunden til at jeg ikke svarer med det samme er, spørgen har det med at acceptere så snart at der kommer et svar der ser rigtig ud. Tit og ofte ender det dog med at svaret ikke kan bruges alligevel og så må svaren til at give point tilbage til spørgen. Jeg finder det derfor nemmere at vente med at svare indtil at spørgeren har afprøvet mit forslag/løsning, og fundet ud af at det rent faktisk virker :)
Kan du ikke prøve at downloade mit project og så se om du kan se hvad der er galt, så vil jeg endda godt give dig 200 ekstra point... http://www.wex.dk/VoiceApp.zip
Det er et program, der er beregnet til at hjælpe handicappede..
Det er for resten en god ide ikke at give point med det samme... og undskyld hvis koden er lidt smadret, men jeg har ikke rigtig programmeret noget stort til Windows før... plejer at bruge en linux.box :) Men i dette tilfælde er vi nødt til at bruge en win.dåse for at appelere til så stor en målgruppe som mulig... lets face it, hvornår har man sidst set en, der er lam fra halsen og ned bruge Linux?? :))
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.