この問題は検索されましたが見つかりませんでした。コードで作成されたタブページでメソッドを実行
フォーム1のコードでは、その中にusercontrolを含むTabPageを作成してから、formPage1.TabControlにTabPageを追加し、usercontrolのpublicメソッドLoadDataを呼び出します。 問題:新しいタブページがアクティブになっているとき、またはフォーカスを取得したときにデータをリロードする必要があります。コードでタブページを作成しなかった場合は、単にTabControlのselectedIndex変更イベントを使用できますが、コードで作成する必要があります。 どうすればいいですか?様式1:
private void CreateNewTab()
{
TabPage tp1 = new TabPage();
tp1.Text = "HSV";
tp1.Name = "tpHSV";
if (tabContMain.TabPages.ContainsKey(tp1.Name) == false)
{
HSVControl hsvc = new HSVControl();
hsvc.Dock = DockStyle.Fill;
hsvc.LoadData();
tp1.Controls.Add(hsvc);
tabContMain.TabPages.Add(tp1);
}
}
==== EDIT ===============コメント 感謝。私の問題をより良く説明しよう。 selectedIndex変更イベントは正常に動作します。私はそれがテキストまたは名前でタブにアクセスすることができます。問題は、hsvc.LoadData()メソッドを呼び出すことです。 hsvcユーザーコントロールを含むタブをクリックすると、このメソッドを呼び出す必要があります。 LoadData()はpublicですが、Form1(selectedIndex変更イベントを保持)でアクセスする方法が見つかりません。 hsvc制御への参照が必要です。
私はこのようにForm1クラスにプロパティを追加しました:
private UserControl mControl;
それを割り当てる:
HSVControl hsvc = new HSVControl();
hsvc.Dock = DockStyle.Fill;
hsvc.LoadData();
mControl=hsvc;
を次にSelectedIndexを変更イベントでそれを呼び出すが、それはまだそこに表示されません。
がここに同じイベントを使用してください。コード内にイベントハンドラを割り当てることができます。このmsdn [example](https://msdn.microsoft.com/en-us/library/edzehd2t(v = vs.110).aspx#Anchor_3)を参照してください。デザイナーが生成したコードを調べて、イベントの処理方法を確認してください。または、あなたのメソッドで 'tabContMain.SelectedIndexChange + ='を書いてから 'Tab'キーを2回押します。 –
'TabControl.SelectedIndexChanged'のように思えます。あなたはどんな問題を抱えていますか?そのイベントハンドラでhsvcを参照する方法がないのは単なるですか?その場合は、フォームクラスに参照を保持するフィールドを追加するだけです。 – adv12
'SelectedIndexChanged'イベントで' hsvc.LoadData() 'を呼び出してください。今私は答えを変えた。 – mostafa8026