如何从子表单访问父表单项?

时间:2014-07-15 04:31:54

标签: c# winforms parent-child

你好朋友请帮助我,我是C#编程的新手。请帮助我,由于以下问题,我无法整合我的项目。 我创建了一个MainScreen表单,其中我使用了两个面板。第一个面板包含项目名称和menustrip。在第二个面板中,我根据用户在menustrip中的点击次数加载不同的面板。 menustrip包含不同的元素,如主页,更新配置文件,搜索,预订和注销。默认情况下,我在MainScreen第二个面板中加载Home窗体。它看起来像网页。成功登录后,我想清除第二个面板,并希望加载主页表单/搜索表单。但是当我尝试这样做时,它会显示"在这种情况下无法访问panel2"。请帮助我,我已经厌倦了为它寻找解决方案。如果这种方式无法实现,请提供一些替代方法。在此先感谢!

我使用下面的代码...我也使mdi父也是如此。

private void homeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Home ob1 = new Home();
        ob1.TopLevel = false;
        ob1.FormBorderStyle = FormBorderStyle.None;
        pnlBody.Controls.Clear();
        pnlBody.Controls.Add(ob1);          
        ob1.Show();
    }

    private void MainScreen_Load(object sender, EventArgs e)
    {
        MainMenuStrip.Items[5].Visible = false;
        Home ob1 = new Home();
        ob1.TopLevel = false;
        ob1.FormBorderStyle = FormBorderStyle.None;
        pnlBody.Controls.Clear();
        pnlBody.Controls.Add(ob1);
        ob1.Show();
    }

2 个答案:

答案 0 :(得分:0)

您可以通过将该控件修饰符指定给public来执行此操作。但是,这不是一个好方法。不要这样做。如果要从表单外部执行任何特定代码,则可以创建单独的方法,然后为该方法创建委托。您可以使用delegate.Invoke调用该方法。 我已经在之前的answer

中提出了建议

答案 1 :(得分:0)

让我们假设您拥有来自主页的这些控件:

button1
textbox1
label1

现在,当您单击菜单选项时,您需要隐藏上面的部分或全部控件,然后显示以下内容:

button2
textbox2
picturebox1
label2

如果你想要这个,那么你可以在单击事件中进行此操作而不使用面板:

private void homeToolStripMenuItem_Click(object sender, EventArgs e)
{
button1.Visible = false;
textbox1.Visible = false;
label1.Visible = false;

button2.Visible = true;
textbox2.Visible = true;
picturebox1.Visible = true;
label2.Visible = true;

button1.Location = new Point(X, Y);
//Other controls locations...
}

新Point是一个类构造函数,允许您更改窗体中控件的位置(X和Y是像素坐标)

而且......我想这就是全部〜:3

哦,你可以使用public int来计算页码...所以,如果你有3个页面,当用户点击时,我不知道" Page 2"您公开的变量X的值为2,因此在您的事件中您可以比较页面组合:

private void homeToolStripMenuItem_Click(object sender, EventArgs e)
{
if(x==1)//You know you are un page 1, you hide all the page 1 controls
{
button1.Visible = false;
textbox1.Visible = false;
label1.Visible = false;
}

else if(x==2)
{
//Hide you page 2 control, etc.
}


//After hidding your controls, next you have to show this page controls and adjust them to the form which are this ones:
button2.Visible = true;
textbox2.Visible = true;
picturebox1.Visible = true;
label2.Visible = true;

button1.Location = new Point(X, Y);
//Other controls locations...


//Finally, set X the value of the page number so you can copy and paste te comparation os X above in your events of every page:
 X = pagenumber;
}