0

C# Windows フォームでアプリケーションを開発しています。タブ コントロールの特定のタブ ページが選択されているかどうかに基づいて、イベント ハンドラー/イベント ハンドラーを作成したいと考えています。たとえば、3 つのタブ ページがあるとします。

tabPage1、
tabPage2、
tabPage3、

に属する

tabControl1,

次のいずれかのコードが必要です。

  1. 各タブ ページに 3 つの個別のイベント ハンドラーを用意する
  2. 1 つのイベント ハンドラーがあり、イベント ハンドラーの内部には、現在選択されているタブ ページを特定できるコードがあります (たとえば、ある種の case ステートメント)。

これまでにいくつかの例を見てきましたが、私が必要としているものはないようです。このイベント/これらのイベントを作成するにはどうすればよいですか?

4

5 に答える 5

4

次のようなものかもしれません:

TabControl.Selectedを利用する

private void tabControl1_Selected(Object sender, TabControlEventArgs e) 
{

   if(e.TabPage == tabPage1) 
     DoSomethingInRelationOfTab1();
   else if(e.TabPage == tabPage2)
     DoSomethingInRelationOfTab2();
   ....
   ....
}
于 2012-03-11T20:10:38.817 に答える
1

このような?

private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
    MessageBox.Show("Current Tab: " + tabControl1.SelectedTab.Text);
}
于 2012-03-11T20:07:08.267 に答える
0

別の解決策は、サブクラス化することですTabPage

class MyTabPage : TabPage {
    event EventHandler Activated;

    public void OnActivated() {
        if (Activated != null)
           Activated(this, EventArgs.Empty);
    }
}

void HandleTabIndexChanged(object sender, EventArgs args) {
    var tabControl = sender as TabControl;
    var tabPage = tabControl.SelectedTab as MyTabPage;
    if (tabPage != null)
        tabPage.OnActivated();
}
于 2012-03-11T20:42:46.283 に答える
0

タブ ページの子コントロールで VisibleChanged イベントを探す必要があります。このイベントは、タブ ページ内のすべての子コントロールに対して発生します。

これは、各ページに CustomControl を配置する場合に非常に便利です。次に、VisibleChanged が発生したときに CustomControl を更新できます。

于 2012-03-11T20:52:00.187 に答える
0

これは私を助けていました:

private void tabControl1_Selected(Object sender, TabControlEventArgs e)
{
    // Could be initialized in "Form_Load"
    var validTabPages = new[]
    {
        tabPage1,
        tabPage2,
        tabPage3,
        tabPage4
    };

    // If not a valid TabPage, just return
    if (!validTabPages.Contains(e.TabPage))
        return;

    pictureBox2.Parent.Controls.Remove(pictureBox2);
    pictureBox5.Parent.Controls.Remove(pictureBox5);

    e.TabPage.Controls.Add(pictureBox2);
    e.TabPage.Controls.Add(pictureBox5);
}
于 2012-03-11T20:06:05.630 に答える