Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 16:42 Der 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 :(

Please help anyone!
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 17:00 #1
Den øverste:
class = public class Control : System.Object
skulle have været:
class = public class VoiceForm : System.Object
Avatar billede burningice Nybegynder
21. februar 2003 - 19:35 #2
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 ?
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 20:21 #3
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..
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 21:57 #4
he he... var vist lidt fuld der :/

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();
    }
  }

}

// Håber jeg fik skrevet koden rigtigt :)
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 21:59 #5
Grunden til at jeg ikke vil bruge "new"-operatoren er, at den klasse jeg laver en ny instans af er min Windows Form klasse, og det dur jo ikke ;)
Avatar billede burningice Nybegynder
21. februar 2003 - 22:07 #6
du skal lave funtionen static.. så kan du kalde den uden at have en instans af dit klasse :)

pulbic static void
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 22:16 #7
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"..
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 22:17 #8
Hey og næste gang så skriv det lige som et svar, så jeg kan give dig point ;)
Avatar billede burningice Nybegynder
21. februar 2003 - 22:34 #9
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 :)
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 22:52 #10
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..
Avatar billede nemezis_aalborg Nybegynder
21. februar 2003 - 22:56 #11
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?? :))
Avatar billede serverservice Praktikant
22. februar 2003 - 00:04 #12
Avatar billede burningice Nybegynder
22. februar 2003 - 00:07 #13
dannyboyd... nemezis_aalborg... sig mig... hvad foregår der her???
Avatar billede nemezis_aalborg Nybegynder
22. februar 2003 - 15:04 #14
Laver det på en anden måde.. tak for svar.
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