いくつかの「現在の状態」変数を更新しておくことをお勧めします。これにより、選択したタブページへのポインターとその子コントロール(ここで説明するタブ付きメモ帳エミュレーションの場合:TextBox)を常に使用できます。私の好みは、辞書を使用してTabPage <> TextBox接続を追跡し、TabPage.Controlsルートを使用してアクセスされた場合にTextBoxをキャストする必要がないようにすることです。次のコードは、フォームに'tabControl1という名前のTabControlがあることを前提としています。
Dictionary<TabPage, TextBox> dct_TabPageToTextBox;
int tabCnt = 1;
TabPage currentTabPage;
TextBox currentTextBox;
したがって、実行時に新しいTabPageを作成するたびに、次のように呼び出します。
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++;
}
エンドユーザーが選択したTabPageを変更すると、次のように現在の状態変数を更新できます。
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にのみ適用されるようになりました。
最高、ビル