2016-04-29 3 views
1

ich einen Event-Handler für ein Linklabel linkLabel2_LinkClicked auf meiner Form haben:C# Anruf ein Ereignis (linkLabel2_LinkClicked) von einer anderen Methode

private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
{ 
    //code here 
} 

Ich brauche es eine andere Methode aufrufen, die kein Objekt Absender hat und jede EventArgs:

private void UpdateMethod() 
{ 
    linkLabel2_LinkClicked(this, ?????) 
} 

Wenn es ein Knopf wäre, würde ich rufen sie die PerformClick Methode. Aber es gibt kein solches für ein LinkLabel, das ich finden könnte.

Was ist die beste Vorgehensweise, um den Code im linkLabel2_LinkClicked Event-Handler auszuführen?

Update: Ich denke, ich war nicht klar hierüber. Ich frage mich über die beste Vorgehensweise, wie ich diesen Ansatz gesehen habe. Ich kann aus den Antworten sehen, dass dies nicht der richtige Ansatz ist, sondern den Code in eine separate Methode zu verschieben und direkt von der anderen Methode aus aufzurufen. Bitte lassen Sie mich wissen, wenn andere Gründe dafür sprechen.

Update 2: Ich schrieb nun den Code wie folgt:

private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
{ 
    CreatePreview(); 
} 

private void UpdateMethod() 
{ 
    CreatePreview(); 
} 

private void CreatePreview() 
{ 
    //code comes here 
} 

Es funktioniert perfekt.

+0

Warum der Downvote? Ich habe dies zum Beispiel hier gesehen: http://stackoverflow.com/questions/11518529/how-to-call-a-button-click-event-from-another-method Und ich bekomme es von den Antworten, dass dies ist eine schlechte Übung, aber das ist, warum ich in erster Linie fragte ... – ib11

Antwort

2

Sie könnten einfach null übergeben, da Sie den Parameter sowieso nicht verwenden, aber ich würde das Gegenteil empfehlen. Es ist entmutigend, ein Ereignis direkt anzurufen, und es führt zu Code, der schwer zu lesen ist.

Haben Sie einfach die andere Methode Anruf CreatePreview().

linkLabel2_LinkClicked(this, null); 

oder erstellen Sie ein neues Ereignisobjekt:

private void UpdateMethod() 
{ 
    CreatePreview(); 
} 
+2

"Es ist entmutigt", stimme ich total zu. Das direkte Aufrufen einer EventHandler-Methode ist eine schlechte Methode. Außerdem sollten Sie EventHandler-Methoden nur zum Aufruf von Funktionen in Ihrer Geschäftslogik verwenden. – whymatter

+0

Danke, das hilft. – ib11

+0

Ich habe den Code geändert und Ihre Antwort hat mir geholfen, das Problem zu beheben, das ich hatte. – ib11

3

Sie können in Ereignisparameter null setzen

linkLabel2_LinkClicked(this, new LinkLabelLinkClickedEventArgs()); 

Aber der beste Weg ist, eine separate Methode erstellen und es in jedem Gespräch Zeit, die du brauchst.

+0

Ich habe meinen Code entsprechend geändert, danke. – ib11

Verwandte Themen