2017-07-15 47 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

只需创建一个属性来存储Table的'Form'和一个构造函数,接受'Form'作为参数并传递你的Main'Form'。然后,您将通过该属性更改当前选项卡 –

+1

等待,对于要更改的每个属性,您都要创建一个新的“Main”实例?难怪他们不会改变。 –

+0

我想创建一个属性来存储主,但我有点迷路。是的,我正在创建一个Main的新实例。我不知道如何去做。 – Lampa

回答

1

如果你每次修改时,实际上是创建多个窗口形式财产创造的Main一个新的实例,他们有没有关系的对方,他们只是坐在内存中,直到它们被显示给用户。你需要的是对在应用程序开始时创建的实际Main表单的引用。为此,请将您想要修改为公共的控件和类似下面的控件一样。

主类全球:

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