C# 如何在Form2、C、Visual studio上从Form1更改tabcontrol的“Enable”属性

C# 如何在Form2、C、Visual studio上从Form1更改tabcontrol的“Enable”属性,c#,winforms,visual-studio-2010,tabcontrol,C#,Winforms,Visual Studio 2010,Tabcontrol,我让Form1和Form2同时处于活动状态,Form2有一个TabControl,我希望Form1上的按钮单击事件更改Form2上TabControl的“启用”属性 Form2上的TabControl设置为tabControl1.enabled=false;Form1充当Form2的登录表单,因此我需要Form1上的登录按钮在Form2上启用“tabControl1” 我可以通过设置private System.Windows.Forms.TabControl tabControl1来访问属性;

我让Form1和Form2同时处于活动状态,Form2有一个TabControl,我希望Form1上的按钮单击事件更改Form2上TabControl的“启用”属性

Form2上的TabControl设置为tabControl1.enabled=false;Form1充当Form2的登录表单,因此我需要Form1上的登录按钮在Form2上启用“tabControl1”

我可以通过设置private System.Windows.Forms.TabControl tabControl1来访问属性;对于“Public”,在Form1上使用下面的on按钮click事件仍然没有任何作用

Form2 formnew2 = new Form2();
formnew2.tabControl1.Enabled = true;

有人能提供一个简单的例子来帮助我理解或链接到以前在表格1中回答的问题吗。 在Form2中,将TabControl的Enable属性包装在公共方法中,并从Form1中调用它

在表格1中:

...
        Form2 form2;
        public Form1()
        {
            // initialize and show form2
            this.form2 = new Form2();
            this.form2.Show();
        }
...
表格2:

...
        public void EnableTabControl()
        {
            this.tabControl1.Enabled = true;
        }
...
然后在Form1中单击按钮时:

private void btnLogin_Click(object sender, EventArgs e)
{
    // verify that it was initialized
    if (form2 != null)
    {
        this.form2.EnableTabControl();
    }
}

在表格1中,请参考表格2。 在Form2中,将TabControl的Enable属性包装在公共方法中,并从Form1中调用它

在表格1中:

...
        Form2 form2;
        public Form1()
        {
            // initialize and show form2
            this.form2 = new Form2();
            this.form2.Show();
        }
...
表格2:

...
        public void EnableTabControl()
        {
            this.tabControl1.Enabled = true;
        }
...
然后在Form1中单击按钮时:

private void btnLogin_Click(object sender, EventArgs e)
{
    // verify that it was initialized
    if (form2 != null)
    {
        this.form2.EnableTabControl();
    }
}

你似乎使用了错误的Form2参考。您可能有一个打开的Form2,但您错误地在Form1中再次创建了Form2的新实例。因此,更改新实例属性对以前打开的实例没有影响

您应该将Form2的实例传递给Form1并使用它


您还可以使用Application.OpenForms找到Form2的运行实例。似乎您使用了错误的Form2引用。您可能有一个打开的Form2,但您错误地在Form1中再次创建了Form2的新实例。因此,更改新实例属性对以前打开的实例没有影响

您应该将Form2的实例传递给Form1并使用它


您还可以使用Application.OpenForms找到Form2的运行实例要将控件设置为公共,请不要更改设计器生成的代码,在Form2设计器中,选择tabControl1并使用属性窗口将tabControl1的修改器属性更改为公共。还要确保您正在显示使其选项卡控件处于禁用状态的实例。另外,如果设置tabControl1.enabled=false;在表单2的表单加载事件中,tabCorntrol将被禁用。@RezaAghaei是的,这正是我想要的,默认情况下,表单2上的TabControl将被禁用。请注意,我可以通过Form2上的按钮单击事件启用TabControl。该按钮显然位于Form2上的TabControl之外,但我的目标是从Form1启用它。顺便说一句,感谢您提供有关修饰符的提示。@RezaAghaei我从属性窗口将tabControl1的Enable属性设置为false,我怀疑您使用了错误的引用表单2。您可能有一个打开的表单2,但是您在这里再次错误地创建了表单2的实例。您应该将表单2的实例传递给表单1并使用它,还可以使用应用程序查找表单2的实例。OpenForms@RezaAghaei谢谢,这正是它的原委,我引用了一个新实例,而不是从form2传递实例。请将您的评论作为答案发布,以便我可以接受。若要将控件设置为公共,请不要更改设计器生成的代码,在Form2设计器中,选择tabControl1并使用属性窗口将tabControl1的修改器属性更改为公共。还要确保您正在显示使其选项卡控件处于禁用状态的实例。另外,如果设置tabControl1.enabled=false;在表单2的表单加载事件中,tabCorntrol将被禁用。@RezaAghaei是的,这正是我想要的,默认情况下,表单2上的TabControl将被禁用。请注意,我可以通过Form2上的按钮单击事件启用TabControl。该按钮显然位于Form2上的TabControl之外,但我的目标是从Form1启用它。顺便说一句,感谢您提供有关修饰符的提示。@RezaAghaei我从属性窗口将tabControl1的Enable属性设置为false,我怀疑您使用了错误的引用表单2。您可能有一个打开的表单2,但是您在这里再次错误地创建了表单2的实例。您应该将表单2的实例传递给表单1并使用它,还可以使用应用程序查找表单2的实例。OpenForms@RezaAghaei谢谢,这正是它的原委,我引用了一个新实例,而不是从form2传递实例。你能不能把你的评论作为一个答案,这样我就可以接受了