1. 程式人生 > >Winfon 窗體控制元件自適應

Winfon 窗體控制元件自適應

      由於公司的業務調整,最近不僅開發bs,還有不熟悉的cs,人手也不足,專案還多,對於cs來說,算是小白,雖然是一個人,也是硬著頭皮寫,拖拽控制元件,自定義控制元件。一個專案下來,對cs有了很深的認識,這裡好好感謝下老大以及身邊的同事,總是在我絞盡腦汁也沒想出好的解決方案時來給我指點迷津。winform程式執行在不同解析度的電腦上,為了相容,基本都是要做窗體自適應功能。之前在網上尋找了很多例子,有的是對 Dock和 Anchor 兩個屬性進行操作,針對面板來說還湊合,但是對於裡面的textbox等小控制元件來說在實際上單靠這兩個完全行不通。有的文章來計算一下針對一些介面簡單的小Demo,看著還行,但是在實際專案的開發中,則完全不行。有的文章則是通過計算控制元件的寬高來達到等比縮放的比例,對於簡單的窗體還好,但是對擁有各種複雜巢狀的窗體來說,就顯得有些捉襟見肘。實際專案中可以直接通過畫表格來達到縮放效果。

      工具箱列表中有一個TableLayoutPanel 控制元件,就是用來製作表格的。在窗體上拖一個該控制元件,設定Dock為Fill 鋪滿,然後將窗體的控制元件填充到表格中,如果是Label 可以直接拖入,如果是其他button、textbox之類的,建議先拖一個pannel 來作為底,再在pannel上放入button、textbox等控制元件。當然並不是每個控制元件都會只佔一個單元格,這就涉及到行合併,列合併。對於TableLayoutPanel 控制元件本身,並沒有像Excle表格那樣提供該屬性。但是也並非沒有解決方案,比如先拖動一個pannel 在一單元格上,設定ColumnSpan(跨行)

RowSpan(跨列),拖動 pannel 合併對應的行列鋪滿(Dock 為Fill ),在將其他控制元件放置在pannel上即可。如下:

             

當然這是對於簡單的介面,而對於那些擁有複雜控制元件的窗體來說,操作也很簡單,只需要稍稍加一個佔比即可。這裡做了一個測試窗體,如下

 

如上圖所示,不難看出這是由 4個TableLayoutPanel 所組合的窗體,首先是一個大表格,一行三列,分別為分類一,分類二,分類三,然後在該三列下分別有一個三行一列的TableLayoutPanel  控制元件。對於縮放而言點選右上角設定列和行的佔比,還能和固定長度進行混合設定,我這裡設定的三列佔比 23%、50%、27%,每列中最上面一行設定固定長度26,剩下的行湊足100%,下面我們來執行一下比較效果

效果還行,基本是按照自己把控的尺寸變化。當然每個列中還會放置很多文字框、標籤、下拉列表等等的控制元件,如果實在是很多,建議再在某個單元格中巢狀一個 TableLayoutPanel 控制元件,而對於這些控制元件,如果同樣希望等比例縮放,則設定Anchor 上下左右全選即可。

如此以來,變可以徹徹底底的解決winform 窗體的自適應困局。