2013-05-11 75 views
2

我有一個Windows窗體,有一堆控件,它工作得很好。所有控件都包含在一個TableLayoutPanel中,根據控件的基本尺寸自動調整大小,Form根據面板進行自動調整,所以我不必擔心不同平臺和計算機的尺寸,因爲一切都應根據當前尺寸調整大小配置的設置。包含TabControl的自動調整表格

例如,下面是一個簡單的例子。 相關的代碼是:

//...code defining all the other Commands and .Add()'ing them to the Panel 
form.Controls.Add(Panel); 
form.AutoSize = true; 
form.FormBorderStyle = FormBorderStyle.FixedDialog; 
form.ShowDialog(); 

Example Dialog

我現在想這整個面板,並把它放在一個TabControl內,所以,它僅僅是一個標籤amonst等等。我這樣做如下:

//...code defining all the other Commands and .Add()'ing them to the Panel 
TabControl tabControl = new TabControl(); 
tabControl.Dock = DockStyle.Fill; 
TabPage tabPage = new TabPage("C1"); 
tabPage.Controls.Add(Panel); 
tabControl.TabPages.Add(tabPage); 
form.Controls.Add(tabControl); 
form.AutoSize = true; 
form.FormBorderStyle = FormBorderStyle.FixedDialog; 
form.ShowDialog(); 

因此,基本上,代替將PanelForm,我把它添加到被添加到被添加到FormTabControlTabPage。然而,這會導致: Results http://img51.imageshack.us/img51/685/5112013112725am.jpg

的文檔指出AutoSize屬性TabControlTabPage是沒有意義單純的基礎設施。我發現的大多數「解決方案」都建議使用.Dock = DockStyles.Fill,這有助於TabControl現在填寫上面的表單,而不是佔用更小的一部分。然而,表格本身保持不變。

我想過使用Panel的規模和製造TabControl的大小等於(或函數)它的,但我注意到,Size參數顯然只有當Panel塗變化,因爲添加Controls並沒有改變它,所以我不得不等待Panel去繪畫然後調整它的大小,這聽起來很sl。。有更好的解決方案嗎?

UPDATE 使用錨定和設置

Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; 
tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; 

只會導致這樣的:

http://img803.imageshack.us/img803/3453/5112013125710pm.jpg

+0

無關的評論:您的GUI似乎是某種平面圖或圖設計器應用程序。我強烈建議你使用相關的當前UI技術,並留下winforms。 ['Here'](http://stackoverflow.com/a/15821573/643085)是在WPF + MVVM中完成類似事件的一個例子,支持動畫,鼠標拖動,動畫以及其他非常有趣的視覺和交互功能。 – 2013-05-11 15:56:24

+0

更不用說你在這裏遇到的問題(這是缺乏獨立的winforms分辨率)絕對不存在於新技術。 – 2013-05-11 16:02:06

+0

是的,我看着那個鏈接,看起來很酷。感謝您讓我花了一整天的時間學習WPF。另外......你真的對WPF充滿激情,我可以說。 – Wasabi 2013-05-11 16:18:08

回答

2

而不是設置大小,爲什麼不利用Anchoring優勢?如果您將Panel固定爲TabPage/TabControlTop | Left | Right | Bottom,那麼TabControlForm的方式與您只需要擔心Form的大小相同。它會決定所有其他項目的大小。

+0

那麼,默認情況下,Panel不是固定在主機對象上的嗎? '.Anchor = Top |的默認值左',我還沒有修改過。同樣,我的想法正好相反,讓表單的內容決定自己的大小(通過'.Autosize'),然後'表格'自動化爲其內容。我不想擔心字體的不同大小,並因此擔心在不同顯示器或不同版本的Windows上的整個「表格」。 – Wasabi 2013-05-11 15:21:03

+0

一切都錨定在頂部|左側'默認。我的建議(我將編輯答案以更好地表達)是你錨定'Top |離開| Right | Bottom'。將它們全部鎖定到「Form」的大小,然後只需要從內容中設置「Form」的大小。 – Adrian 2013-05-11 15:28:26

+0

謝謝,但奇怪的是,實際上讓事情變得更糟。添加: 'Panel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;' 'tabControl.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;' 只是讓'TabControl'表現得像'.Dock!= Fill'一樣,現在它甚至不填充表單。 而它的一個真正無趣的,顯然沒有辦法使'TabControl'像一個帶'Panel'的簡單'Form'一樣好,在那裏我不必擔心任何東西的大小。 – Wasabi 2013-05-11 15:43:16

-1

在設計器中使用.AutoScaleMode = None作爲用戶控件的面板。 在我的情況下,它的工作原理是TabControl-TabPage-myPage。