2016-06-30 29 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