HDSoftware Skrevet 5. august 2008 Del Skrevet 5. august 2008 Heisan folkens Har en form med en knapp som jeg ønsker å trykke på virtuelt. Har jo metodene Button_OnClick(object sender, eventarg e), men jeg kan jo ikke kalle denne metoden uten videre. Jeg har jo gjort det enkelt før ved å lage en egen metode og kalle denne fra Button_OnClick, men det må da være mu,ig å trykke på knappen via kode. Fra Clarion var dette relativt greit på denne måten: post(EVENT:Accepted,,?btnKnappenMin) men hvordan gjør jeg tilsvarende i C#? Lenke til kommentar
GeirGrusom Skrevet 5. august 2008 Del Skrevet 5. august 2008 (endret) btnKnappenMin.PerformClick() edit: nå er ikke dette egentlig svar på spørsmålet, men ihvertfall den beste løsningen på problemet. For å sende meldinger må du bruke native windows funksjonene SendMessage, SendMessageCallback eller PostMessage. Det er noen forskjeller på disse, først og fremst så vil SendMessage vente til vinduet har behandlet meldingen, mens SendMessageCallback får tilbakemelding og venter derfor ikke, og PostMessage returnerer øyeblikkelig uten å kunne ta imot noen tilbakemelding. /* C++ BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );*/ [System.Runtime.InteropServices.DllImport("User32")] public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); Jeg er ikke sikker på hvilke WM_ events som er forbundet med click eventet, WM_MOUSEUP kanskje? Endret 5. august 2008 av GeirGrusom Lenke til kommentar
j000rn Skrevet 5. august 2008 Del Skrevet 5. august 2008 (endret) Har jo metodene Button_OnClick(object sender, eventarg e), men jeg kan jo ikke kalle denne metoden uten videre. Hvorfor ikke? Button_OnClick( Button/null/blah, null/new EventArg() ); Har tilogmed flere valgmuligheter for parametere som du ser. Hvis de ikke blir brukt i event'n så er det igrunn samme hva du sender.... Endret 5. august 2008 av jorn79 Lenke til kommentar
GeirGrusom Skrevet 5. august 2008 Del Skrevet 5. august 2008 (endret) Hvorfor ikke? Button_OnClick( Button/null/blah, null/new EventArg() ); Hvorfor ikke PerformClick? Endret 5. august 2008 av GeirGrusom Lenke til kommentar
j000rn Skrevet 5. august 2008 Del Skrevet 5. august 2008 Hvorfor ikke PerformClick? Fordi jeg er teit.... Men den måten fungerer jo for alle typer "eventer", dessuten var det litt svar på HDSoft sitt spørsmål om at det ikke var mulig.... Lenke til kommentar
HDSoftware Skrevet 6. august 2008 Forfatter Del Skrevet 6. august 2008 Hvorfor ikke PerformClick? Fordi jeg er teit.... Men den måten fungerer jo for alle typer "eventer", dessuten var det litt svar på HDSoft sitt spørsmål om at det ikke var mulig.... PostMessage er en helt grei løsning fordi det ikke er interresant å vite om noe har skjedd i den forbindelsen eller ikke. Men denne løsningen er litt "lowlevel" og jeg tror nok PerformClick er tingen ;-) Skulle jo ikke forbause meg om at PerformeClick() faktisk bare sender en message på den måten. Takker for svar. Som regel er det meste rimelig enkelt, bare man vet om løsningene ;-) Lenke til kommentar
aadnk Skrevet 8. august 2008 Del Skrevet 8. august 2008 Skulle jo ikke forbause meg om at PerformeClick() faktisk bare sender en message på den måten.Ikke i følge Reflector. Prosedyren ser kun ut til å invokere hendelsen direkte (etter å forsikret seg om at knappen kan klikkes): public void PerformClick() { if (base.CanSelect) { bool flag; bool flag2 = base.ValidateActiveControl(out flag); if (!base.ValidationCancelled && (flag2 || flag)) { base.ResetFlagsandPaint(); this.OnClick(EventArgs.Empty); } } } 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å