2017-11-17 2 views
0

Mein Tabcontrol hat 3 Registerkarten. Ich bin momentan in Tab. 1, wenn ich Tab 2 auswählen würde. Ich möchte eine Methode in meinem UserControl ausführen, die dieser Tabpage zugewiesen ist. Man könnte dies einen "Focus" Listener nennen. Wie würde ich das umsetzen? Oder ist das überhaupt möglich?WinForms auf Registerkarte ausgewählte Run-Methode in UserControl

Edit:

Können sagen, ich habe eine Datei mit dem Namen „UserControl1.cs“ Hier gibt es ein Verfahren OnFocus() ist, würde Ich mag diese Methode aufrufen, wenn ihre tabpage die aktive Registerkarte wird. Ich Zuweisen der Usercontrol TabPage wie folgt aus:

 // AllOpenUserControls = List<UserControl> // With the active pages 

     TabPage newPage = new TabPage(); 
     newPage.Text = title; 
     newPage.AutoScroll = true; 
     newPage.BackColor = SystemColors.Window; 
     newPage.Controls.Add(userControl); 
     AllOpenUserControls.Add(userControl); 

     tabControl.TabPages.Add(newPage); 
+0

Meinten Sie dies ?: https://msdn.microsoft.com/en-us/library/system.windows.forms.tabcontrol.selectedindexchanged(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp# Code-Snippet-1 – MatSnow

+0

@MatSnow das ist ein Anfang, aber wie würde ich diese Methode in meinem UserControl ausführen, wenn dieser Listener aufgerufen wird? –

+0

Fügen Sie einen Eventhandler für 'TabControl.SelectedIndexChanged' hinzu. https://docs.microsoft.com/en-us/dotnet/framework/winforms/how-to-create-event-handlers-at-run-time-for-windows-forms – MatSnow

Antwort

1

die EventHandler für SelectedIndexChanged hinzufügen hier:

... 
tabControl.TabPages.Add(newPage); 
tabControl.SelectedIndexChanged += new EventHandler(userControl.OnFocus); 

Ihre OnFocus -Methode sollte wie folgt aussehen:

public void OnFocus(object sender, System.EventArgs e) 
{ 
    TabControl tc = (TabControl)sender; 
    if (tc.SelectedTab == this.Parent) 
    { 
     //Parent-Tab is selected, do stuff... 
    } 
} 
+1

Danke, das hat es geschafft. In meinem Fall erweitere ich eigentlich ein Objekt mit dem Namen 'BaseUserControl'. Ich habe das' public virtual void OnFocus() 'dort eingefügt. Im eigentlichen UserControl 'UserControl1: BaseUserControl' habe ich diese Methode überschrieben und jetzt funktioniert es. –

Verwandte Themen