2016-06-30 25 views
0

我的应用程序(名称空间)有一个包含面板(面板)的主表单(表单)。在面板和类之间传递信息

当主窗体加载时,它调用一个子窗体进入它的面板。该子表单用作启动页面。它有一个“启动”按钮。当按钮被点击时,子窗体应该隐藏并且新窗体应该加载到面板中。

private void buttonLaunch_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
     Hub NewHub = new Hub(); 
     NewHub.TopLevel = false; 
     NewHub.AutoScroll = true; 
     Master.panelMaster.Controls.Clear(); 
     Master.panelMaster.Controls.Add(NewHub); 
     NewHub.FormBorderStyle = FormBorderStyle.None; 
     NewHub.Show(); 
    } 

,我发现了错误:

Error 1 An object reference is required for the non-static field, method, or property 'Manager_0._2.Master.panelMaster'

我不知道如何解释错误来解决问题。

+1

我还没有看完这个问题,主要是因为你的大小写困惑。推荐阅读:https://msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx – adv12

回答

2

好吧,假设你有一个名为namespace.class类,它包含一个名为panel成员,编译器告诉你,你似乎在试图通过类本身来访问panel而不是类的实例(即对象) 。为了使class一个实例,做这样的事情:

namespace.class c = new namespace.class(); 

然后你就可以访问名为panel该对象的属性或字段:

c.panel.Controls.Clear(); 

注意:您的命名选择是非常差的。调用命名空间namespace或类class只是要求麻烦。这里有一些建议命名约定:

Naming Guidelines

更新:从细读了你的问题,看来你想添加一个FormPanel。一旦你通过这个编译问题,你会开始得到运行时错误,因为这不是Windows窗体的工作方式。您不能在Panel中输入FormForms是顶层UI元素。我真的不明白你的目标是否足够建议你去做什么。

+0

我已经命名了,因为我试图让帖子更清晰。我编辑了该帖子以反映所使用的名称。 该应用程序将具有多种用途。与其打开几个不同的窗口,想法是在主窗体一侧的面板外面会有一组按钮。您可以使用这些按钮调用您需要与之交互的表单。清理用户界面并且不会混乱桌面。 确实能帮助您了解整体目标吗? – TheJak

+0

它的确如此。但是,“Forms”是顶层UI元素,不能包含在Panels中。如果要在Windows窗体设计器中编辑它们,可以使用自定义控件(直接从'Control'继承,或从'UserControl'继承)。但是你不能使用'Forms'。 – adv12

+0

关于命名,您编辑成问题的真实版本比首先使用的假冒版本要好。特别是,在实例化'Hub'(大概是'Form'的子类与定制设计和逻辑)和实例化一个通用'Form'之间有一个重要的区别。我无法理解你为什么要制作一个空的“表格”并试图显示它。仅供参考,还建议使用'camelCasing'而不是'PascalCasing'来命名局部变量,以便将它们与类和公共/受保护属性名称轻松区分开来。 – adv12