Я предлагаю вам обновлять некоторые переменные «текущего состояния», чтобы у вас всегда был указатель на выбранную вкладку и ее дочерний элемент управления (в случае обсуждаемой здесь эмуляции с вкладками и блокнота: TextBox). Я предпочел бы отслеживать соединения TabPage <> TextBox с использованием словаря, чтобы избежать необходимости приведения TextBox, если к ним обращаются по маршруту TabPage.Controls: следующий код предполагает, что у вас есть TabControl с именем 'tabControl1 в форме:
Dictionary<TabPage, TextBox> dct_TabPageToTextBox;
int tabCnt = 1;
TabPage currentTabPage;
TextBox currentTextBox;
Итак, когда вы создаете каждую новую вкладку во время выполнения, вы вызываете что-то вроде этого:
private void AddNewTabPage()
{
if (dct_TabPageToTextBox == null) dct_TabPageToTextBox = new Dictionary<TabPage, TextBox>();
currentTabPage = new TabPage("Page " + tabCnt.ToString());
tabControl1.TabPages.Add(currentTabPage);
currentTextBox = new TextBox();
dct_TabPageToTextBox.Add(currentTabPage, currentTextBox);
currentTabPage.Controls.Add(currentTextBox);
currentTextBox.Dock = DockStyle.Fill;
currentTextBox.Text = "sample text for page " + tabCnt.ToString();
tabControl1.SelectedTab = currentTabPage;
tabCnt++;
}
Когда конечный пользователь меняет выбранную вкладку, вы можете просто обновить текущие переменные состояния следующим образом:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
currentTabPage = tabControl1.SelectedTab;
currentTextBox = dct_TabPageToTextBox[currentTabPage];
MessageBox.Show("text in current Tab Page is : " + currentTextBox.Text);
}
Итак, теперь код, который вызывается вашими пунктами меню, применяется только к currentTextBox.
лучший, Билл