2017-11-17 4 views
0

My Tabcontrolには3つのタブページがあります。私はタブページ2を選択すると、現在タブページ1にあります。そのタブページに割り当てられたUserControlでメソッドを実行したいと思います。これを「フォーカス」リスナーと呼ぶことができます。私はこれをどのように実装しますか?あるいは、これはまったく可能ですか?WinForms on Tabpage UserControlで選択した実行メソッド

編集:

は私がそのタブページがアクティブなタブになったときに、このメソッドを呼び出したいメソッドOnFocus()があり、ここでは「UserControl1.cs」という名前のファイルを持っているとしましょう。私はこのようなタブページに、ユーザーコントロールを割り当てています:

 // AllOpenUserControls = List<UserControl> // With the active pages 

     TabPage newPage = new TabPage(); 
     newPage.Text = title; 
     newPage.AutoScroll = true; 
     newPage.BackColor = SystemColors.Window; 
     newPage.Controls.Add(userControl); 
     AllOpenUserControls.Add(userControl); 

     tabControl.TabPages.Add(newPage); 
+0

あなたが意味ですかこれは?:https://msdn.microsoft.com/en-us/library/system.windows.forms.tabcontrol.selectedindexchanged(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#コードスニペット-1 – MatSnow

+0

@MatSnowは始まりですが、そのリスナーが呼び出されているときに、私のUserControlの内部でそのメソッドを実行する方法はありますか? –

+0

'TabControl.SelectedIndexChanged'のイベントハンドラを追加します。 https://docs.microsoft.com/en-us/dotnet/framework/winforms/how-to-create-event-handlers-at-run-time-for-windows-forms – MatSnow

答えて

1

ここSelectedIndexChangedためEventHandlerを追加します。

... 
tabControl.TabPages.Add(newPage); 
tabControl.SelectedIndexChanged += new EventHandler(userControl.OnFocus); 

をごOnFocus -methodは次のようになります。

public void OnFocus(object sender, System.EventArgs e) 
{ 
    TabControl tc = (TabControl)sender; 
    if (tc.SelectedTab == this.Parent) 
    { 
     //Parent-Tab is selected, do stuff... 
    } 
} 
+1

ありがとう、これはそれをしました。私の場合は、実際に 'BaseUserControl'というオブジェクトを拡張しています。そこに' public virtual void OnFocus() 'を作成しました。実際のUserControlの 'UserControl1:BaseUserControl'ではこのメソッドをオーバーライドしています。 –

関連する問題