主窗體包含一個 TabControl,每個 Tab 頁面承載一個子窗體。需求:在父窗體點擊按鈕,觸發當前激活 Tab 頁面中子窗體的特定方法或操作其控件。
通過 TabControl.SelectedTab 獲取當前頁面,再遍歷其 Controls 集合查找目標子窗體或控件。
// 父窗體按鈕點擊事件
private void btnParentAction_Click(object sender, EventArgs e) {
// 1. 獲取當前選中的 TabPage
TabPage currentPage = tabControl1.SelectedTab;
if (currentPage == null) return;
// 2. 假設子窗體直接作為控件添加在 TabPage 上
foreach (Control ctrl in currentPage.Controls) {
if (ctrl is Form childForm) { // 或判斷具體類型 ChildForm
// 方式一:調用子窗體公共方法
childForm.ExecuteAction();
// 方式二:操作子窗體內部控件(需控件為 public 或提供訪問器)
// Button btn = childForm.Controls["btnChild"] as Button;
// if (btn != null) btn.PerformClick();
break; // 假設每頁只有一個子窗體
}
}
}
childForm.TopLevel = false; childForm.FormBorderStyle = FormBorderStyle.None; childForm.Dock = DockStyle.Fill;。is 或 as 安全轉換,避免運行時異常。public void ExecuteAction() 統一入口,而非直接暴露內部控件。Dictionary 映射,直接索引,避免遍歷。