不知道說清楚沒有?
就是我的窗口分為兩部分,
左邊,控制部分,由一些按鈕組成
右邊,顯示部分,由些控件(如下拉,文本等等組成)
左邊的每個按鈕對應顯示部分的頁面,也就是說,左邊換一個按鈕點,那么右邊就顯示其相應的內容.
比如,左邊有3個按鈕,分別 進貨,出貨,庫存
點進貨,右邊出現進貨的頁面,
點出貨,右邊出現出貨頁面,
請問應該如何實現頁面切換控制,我朋友告訴我,把3個頁面做成3個重疊的頁面,然后控制他們好顯示與隱藏來達到目的,但我覺得不太好,感覺 有點亂.
我覺得可不可以把每個Panel寫成相應的對象,每次點的時候銷毀其他,然后再生成一個,但是不知道怎么寫?是不是用用戶自定義控件
這里不用tabcontrol,MDI也不用,就是幾個頁面換的方法,
其實我主要是想要動態加載,因為頁面有點多,如果用 tabcontrol,不太好,我剛才說進銷存,只是個例子,如果要實現動態加載怎么用,或者用用戶控件怎么用?????????謝謝大家
或者有沒有更好的方法?請大家指點
可以在左邊固定的界面使用委托,初始化讓左邊窗體全部顯示為(0,0),默認的為最大顯示.然后點擊左邊窗體的時候,初始化右邊的窗體,同樣是讓右邊的窗體顯示在固定的位置.例子如下:
public void showSideForm(Form form)
{
this.lastSideForm.Visible = false;//上一個窗體,最初默認是顯示的窗體
this.lastSideForm = form;
this.lastSideForm.Visible = true;
form.Parent = this.pSide;//pSide為左邊固定框的panel
}
public void showMainForm(Form form)
{
this.lastMainForm.Visible = false;//上一個窗體,最初默認是顯示的主窗體
this.lastMainForm = form;
form.Parent = this.pMain;//pMain為主窗體的panel
form.Visible = true;
}
public void InitialForm(Form form)
{
form.Location = new Point(0,0);
form.TopLevel = false;
form.TopMost = false;
form.StartPosition = FromStartPosition.Manual;
}
然后在form1_Load中加入一個委托,將所有在左邊顯示的窗體全部InitialForm;
聲明一個委托delegate d(Form form)類,每一個左邊窗體聲明對象時new一個參數d,
動態顯示窗口。
定義窗口變量,不同的按鈕,創建不同的窗口變量來顯示。指定父窗口是同一個容器控件。
繼續追問:
請進一步告訴我下,如何定義動態窗口?請問窗口會彈出來嗎?我的不要他彈出來,要嵌在頁面中
補充回答: 你說的到底是C# WindowForm,還是C# WebForm?
繼續追問:
WindowForm
要嵌在主窗口中
補充回答:
右邊放一個容器類控件,比如Panel。
指定動態的窗口變量的父窗口為Panel 。
補充回答: 朋友,我說的還不夠清楚?
繼續追問:
左邊放了按鈕
右邊放了個PANEL
現在我不清楚的是右邊是一個頁面對應一個PANEL,還是所有頁面都用一個PANEL
繼續追問:
我知道了,就是寫出幾個繼承窗口,然后是父類是右邊那個PANEL,這樣窗口就不會彈出來?這樣只要每個按鈕指定一個窗口!就可以控制了!
繼續追問: 是這樣嗎?
補充回答: 是所有頁面共用一個Panel 。
補充回答: 不妨一試。
繼續追問: 那問題是,如果出來一個頁面,我點了另一個按鈕,這個時候出來另一個頁面,剛才出來的需要銷毀嗎?如果要銷毀,怎么銷毀
補充回答: 不需要銷毀啊。
樓主看看這張圖片,是不是你想要的效果。
補充回答: 做個簡單的說明,左邊是一個可以收展的導航,上面是功能按鈕
右邊部分是對應功能塊,不允許同名窗口多次打開
采用的是多文檔
還有疑問,請追問
繼續追問:
恩,有點像,但是我右邊的窗口不能動,而且一次只能出來一個穿口
補充回答: 不能動更簡單,load的時候窗體顯示為最大化,同時設置最大化屬性為false
但是必須在每個窗口上添加關閉按鈕,可以理解嘛
補充回答: 當然你也可用通過設置 WindowState 為 Maximized
繼續追問:
恩,明白了很多,
問題是如果我重新點另一按鈕,怎么銷毀以前打開的呢?還有就是那個標題爛如何去掉,我想讓他看起來就是一個整體,而不是其中的一個窗口
繼續追問: 窗口有點多,而且有點復雜,如何設置了不能重復打開,打開一個,關閉另一個的時候如何銷毀前面一個?
補充回答: 我說的是不允許同名窗口多次打開!!!
比如說已經新建了一個管理 客服信息的窗體就不能在未關閉這個窗體之前打開另一個管理 客服信息的窗體,但是可以打開其他不同名的窗體
補充回答: 至於去掉子窗體標題欄可以:
設置這兩個屬性
this.ControlBox = false;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
添加下面的事件就可以了
private void Form_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.FormBorderStyle = FormBorderStyle.None;
}
else
{
this.FormBorderStyle = FormBorderStyle.Sizable;
}
}
補充回答: 當然在這里
else
{
this.FormBorderStyle = FormBorderStyle.Sizable;
}
是多余的