2014-07-15 80 views
1

你好朋友請幫幫我,我是C#編程新手。請幫助我,由於以下問題,我無法整合我的項目。 我已經創建了一個MainScreen窗體,我用了兩個面板。第一個面板包含項目名稱和菜單條。在第二個面板中,我根據用戶在菜單欄中單擊的內容來加載不同的面板。 menustrip包含不同的元素,如主頁,更新配置文件,搜索,預訂和註銷。默認情況下,我在MainScreen 2nd面板中加載Home窗體。它看起來像網頁。成功記錄後,我想清除第二個面板,並希望加載主頁表單/搜索表單。但是當我嘗試這樣做時,它會顯示「U can not access panel2 in this context」。請幫助我,我厭倦了爲它尋找解決方案。如果這種方式是不可能的,請給我一些替代方法。提前致謝!如何從子窗體訪問父窗體項?

我用下面的代碼...我也讓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(); 
    } 
+0

你有沒有嘗試之前詢問? Panel1.Visible = false; Panel1.SendToBack(); –

+0

但我希望它們可見。我只是想在panel2中加載不同的表單,具體取決於menutrip上的點擊。 – Shra1

+0

@ Shra1你在給我建議我的文章有問題嗎?如果你有問題要理解流程,那麼你可以問我。或者,如果我在某處錯了,那就告訴我。我會盡力糾正我的答案。 – Shell

回答

0

您可以簡單地通過將該控件修飾符分配給public來執行此操作。但是,這不是一個好辦法。不要這樣做。如果要從表單外部執行任何特定代碼,則可以創建一個單獨的方法,然後爲該方法創建委託。您可以使用delegate.Invoke來調用該方法。 我已經建議在我以前的answer

0

讓我們想象一下,你有這些控件是從你的主頁:

button1 
textbox1 
label1 

現在,當你點擊你需要隱藏一些或者全部的控制,然後顯示出這些的菜單選項:

button2 
textbox2 
picturebox1 
label2 

如果你想要這個,那麼你可以讓這個click事件,而無需使用面板:

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... 
} 

當新的點是一個類的構造函數,可以讓你改變形式的控制的位置(X和Y像素座標)

而且......我想這是所有〜:3

哦,你可以使用公共int來計算頁碼......所以,如果你有例如3頁,當用戶點擊,我不知道「第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; 
} 
相關問題