2017-07-15 3 views
-1

私はTabControlを含むメインフォームを持っています。新しいフォームがTabControlのタブとして追加されます。 TabControlでフォームでないフォームから現在のアクティブなタブまたは閉じるタブを変更するのに問題があります。私がアクセスしようとしているコンポーネントはすべてPublicです。ここで他のC#フォームのコンポーネントにアクセスする際の問題

私はタブを変更するために使用するコードです:

Main mainForm = new Main(); 
mainForm.tcMain.SelectTab(mainForm.tpHome); 

それは、私はそれが最初のタブのインデックスにそれを変更しようとした場合でも0

を動作しません。私も持っています私はこのような他の形式から変更しようとしている主な形でレーベル:

Main mainForm = new Main(); 
mainForm.labelStatus.Text = "Refreshed"; 

それは任意の助けになるだろう場合は、これは私がからメインフォームにアクセスしようとしているフォームが

と呼ばれる方法です
Table tableForm = new Table(); 
tableForm.TopLevel = false; 
TabPage tableTab = new TabPage(tableForm.Text); 
tcMain.TabPages.Add(tableTab); 
tableForm.panelTable.Parent = tableTab; 
tableForm.Parent = tableTab; 
tcMain.SelectTab(tableTab); 
tableForm.Show(); 
+0

だけをパラメータとしてメイン 'Form'と' Form'を受け入れる表のコンストラクタを保存し、それを自分のメイン 'Form'を渡すために、プロパティを作成します。次に、そのプロパティを介して現在のタブを変更します –

+1

待って、あなたが変更したいすべてのプロパティに対して、 'Main'の新しいインスタンスを作成していますか?彼らが変わらないのも不思議ではありません。 –

+0

私はメインを格納するためのプロパティを作成しようとしていますが、私は紛失しています。そして、はい、私はメインの新しいインスタンスを作成していました。それ以外の方法は分かりませんでした。 – Lampa

答えて

1

それらがユーザーに表示されるまで、あなたが修正すべてのプロパティに対してMainの新しいインスタンスを作成する場合は、あなたが実際にその多くのWindowsフォームを作成している、と彼らはお互いに関係のない、彼らは単にメモリに座ります。必要なのは、アプリケーションの開始時に作成された実際のメインフォームへの参照です。そのためには、あなたが変更したいコントロールを公開し、以下のようにします。

メイン・クラスグローバル:

static public Main instance; 

メインクラスMain_Load()メソッド:すべてのあなたの他の形態で

instance = this; 

だけMain.instanceのようなメインフォームのインスタンスにアクセスします。したがって、この

Main mainForm = new Main(); 
mainForm.labelStatus.Text = "Refreshed"; 

Main.instance.labelStatus.Text = "Refreshed"; 

なり、ここで重要なことは、あなたがpublicにメインフォームに変更したいすべてのコントロールのアクセス修飾子を設定することになります。

+0

それは動作します、ありがとう! – Lampa

関連する問題