Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 av GeirGrusom
Lenke til kommentar
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 av jorn79
Lenke til kommentar
Hvorfor ikke PerformClick? :p

 

Fordi jeg er teit.... :D

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...