2017-05-02 4 views
0

Ich arbeite an einem Programm, das einige Tabs benötigt. Ich wollte keine Schaltflächen zum Hinzufügen/Entfernen von Tabs, meine Idee war ein Kontextmenü hinzufügen, wenn ich mit der rechten Maustaste drücke, aber es gibt mir einen Fehler. Dies ist der Code:Wie kann ich ein Ereignis auf einen Kontextmenüeintrag setzen?

private void tabControl1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (context_add_remove_control < 1) 
     { 
      var add_tab = tab_options.MenuItems.Add("Add tab"); 
      var remove_tab = tab_options.MenuItems.Add("Remove tab"); 
      add_tab.Click += new EventHandler (Add_tab_click()); 
     } 
     tabControl1.ContextMenu = tab_options; 
    } 

    private EventHandler Add_tab_click() 
    { 

    } 

Aber die Add_tab_click Methode gibt mir eine Fehlermeldung:

'Form1.Add_tab_click': not all code paths return a value

Was das bedeutet?

+0

Die Fehlermeldung zeigt an, dass Sie nicht einen Wert von zurückgeben 'Add_tab_click()', obwohl die Methodensignatur einen Rückgabewert vom Typ 'EventHandler' angibt. –

+0

Sie haben eine Funktion deklariert, die erwartet, dass ein EventHandler zurückgegeben wird. Wenn das ein Event sein soll, wird es für falsch erklärt. Wenn es eine Funktion sein soll, muss es einen EventHandler zurückgeben ... – Aaron

+0

Ok gut, aber wie kann ich das lösen? –

Antwort

0

private EventHandler Add_tab_click()

Der Compiler erwartet Add_tab_click() ein EventHandler zurückkehren, weil Ihre Methode als Rückkehr eines markiert ist (im Gegensatz zu erlöschen). In diesem Fall SOLLTE die Methode jedoch void zurückgeben, da der Delegat EventHandler eine Methode erwartet, die zwei Parameter (ein Objekt und EventArgs) akzeptiert und void zurückgibt. So sollten Sie Ihren Code ändern:

private void Add_tab_click(object sender, EventArgs e)

und diese ändern: add_tab.Click += new EventHandler (Add_tab_click());

zu:

add_tab.Click += Add_tab_click;

+0

Der 'Add_tab_click' sollte auch' Objektabsender' und 'EventArgs e' Parameter als' EventHandler' Delegat akzeptieren. –

+0

Ah ja. Bearbeitet. – aquinas

+0

jetzt der 'add_tab.Click + = Add_tab_click;' gibt diesen Fehler: Kann Typ void nicht implizit in Systemereignis konvertieren hadler –

Verwandte Themen