ausführen Ich habe gesucht, kann dieses Problem jedoch nicht finden.Methode auf der in Code erstellten Registerkarte
Auf Formular 1 im Code, ich erstellen eine TabPage mit einem Benutzersteuerelement darin und dann fügen Sie die TabPage zu form1.TabControl und rufen Sie die öffentliche Methode LoadData auf dem Benutzersteuerelement. Problem: Ich muss die Daten neu laden, wenn die neue Registerkarte aktiviert ist oder den Fokus erhält. Wenn ich die Registerkarte nicht im Code erstellen würde, könnte ich einfach das selectedIndex change-Ereignis von TabControl verwenden, aber es muss in Code erstellt werden. Wie kann ich das tun? Form 1:
private void CreateNewTab()
{
TabPage tp1 = new TabPage();
tp1.Text = "HSV";
tp1.Name = "tpHSV";
if (tabContMain.TabPages.ContainsKey(tp1.Name) == false)
{
HSVControl hsvc = new HSVControl();
hsvc.Dock = DockStyle.Fill;
hsvc.LoadData();
tp1.Controls.Add(hsvc);
tabContMain.TabPages.Add(tp1);
}
}
==== EDIT =============== Danke für die Kommentare. Lass mich versuchen, mein Problem besser zu erklären. Das selectedIndex-Änderungsereignis funktioniert einwandfrei. Ich kann auf die Registerkarte über den Text oder den Namen zugreifen. Das Problem ist der Aufruf der Methode hsvc.LoadData(). Ich muss diese Methode aufrufen, wenn auf die Registerkarte mit dem Benutzersteuerelement hsvc geklickt wird. Die LoadData() ist öffentlich, aber ich finde keine Möglichkeit, in Form1 (die das SelectedIndex-Änderungsereignis enthält) zuzugreifen. Ich brauche einen Verweis auf HSVC-Kontrolle.
habe ich eine Eigenschaft der Klasse Form1 wie folgt aus:
private UserControl mControl;
Zuweisung es dann:
HSVControl hsvc = new HSVControl();
hsvc.Dock = DockStyle.Fill;
hsvc.LoadData();
mControl=hsvc;
Dann ist es in SelectedIndex Änderungsereignis nennen, aber es ist immer noch da nicht sichtbar.
Verwendung hier das gleiche Ereignis. Sie können den Ereignishandler im Code zuweisen. Siehe dieses msdn [Beispiel] (https://msdn.microsoft.com/en-us/library/edzehd2t (v = vs.110) .aspx # Anchor_3). Oder schauen Sie in Ihren vom Designer generierten Code, um zu sehen, wie er mit Ereignissen umgeht. Oder schreiben Sie in Ihrer Methode 'tabContMain.SelectedIndexChange + =' und drücken Sie dann zweimal die 'Tab'-Taste. –
Scheint wie 'TabControl.SelectedIndexChanged' sollte gut funktionieren.Welche Schwierigkeiten hast du? Ist es nur so, dass Sie in diesem Event-Handler keine Möglichkeit haben, auf hsvc zu verweisen? Wenn dies der Fall ist, fügen Sie Ihrer Formularklasse einfach ein Feld hinzu, um einen Verweis darauf zu halten. – adv12
So rufen Sie 'hsvc.LoadData()' im 'SelectedIndexChanged' Ereignis auf. Im Moment habe ich meine Antwort geändert. – mostafa8026