Winfon 頁籤切換及窗體控制項自適應

2022-02-10 11:44:19 字數 2931 閱讀 2504

由於公司的業務調整,最近不僅開發bs,還有不熟悉的cs,人手也不足,專案還多,對於cs來說,算是小白,雖然是乙個人,也是硬著頭皮寫,拖拽控制項,自定義控制項。乙個專案下來,對cs有了很深的認識,這裡好好感謝下老大以及身邊的同事,總是在我絞盡腦汁也沒想出好的解決方案時來給我指點迷津。

首先介紹下cs的頁籤功能,畢竟之前學校那會,僅僅是簡單的彈出新窗體,關閉就窗體。對於專案中是選單而言,肯定是要有子介面相互切換的功能,關於這一塊,其實就是在主窗體中畫乙個pannel(其他的listbox也可以),按鈕點到**就把對應的子窗體載入到主窗體上的pannel(listbox)中即可,當然子窗體可以選擇新建窗體、新建使用者控制項,如果選擇新窗體,需要將formborderstyle的屬性值設為none,來去掉窗體四周多餘的料。操作如下圖,設定了兩個窗體,乙個使用者控制項。分別命名為form01、form002、form003con

(注: 初始化的時候執行子窗體的建構函式,show之後執行load 函式)

private

form001 f1;

private

form002 f2;

private

form003con f3;

private

void main_load(object

sender, eventargs e)

private

void btn_001_click(object

sender, eventargs e)

private

void btn_002_click(object

sender, eventargs e)

private

void btn_003_click(object

sender, eventargs e)

根據以上操作,窗體在放大的時候,子窗體 f1保持初始化大小,而子窗體 f2、f3隨隨著主窗體變大而跟著變大。效果圖如下

做到這裡效果是能達到了,但是會有乙個問題,就是對控制項事件的控制,比如子窗體1,2,3 中分別有乙個按鈕控制項,這些按鈕按下去要獲得主窗體的一些引數資訊,常規方法是在子窗體後台的建構函式中加入引數,然後父窗體new 子窗體物件的時候傳遞值進去。這種實現方法沒問題,但是有時候會遇到這種情況,父窗體需要子窗體的某些控制項資訊,拿到這些資訊後要在父窗體中進一步處理後顯示。這種時候的處理其實是將子窗體中按鈕的觸發事件載入到父窗體中來實現。**如下

private

void btn_002_click(object

sender, eventargs e)

private

void f2btnquery(object

sender, eventargs e)

此外,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 控制項,再次進行拆分,pannel進行填充跨行列,而對於這些控制項,如果同樣希望等比例縮放,則設定anchor 上下左右全選即可。如此以來,變可以徹徹底底的解決winform 窗體的自適應困局。

由於本人在cs開發方面還屬於小白水平,獨立開發專案時在功能完成的情況下對這些介面布局設定上面走了很多彎路,這裡記錄一下,畢竟作為空巢老人,指不定明天就忘記了,如果能對其他人有丁點的幫助,那便甚是欣慰。

TestNg 切換多個頁籤

當前有乙個專案,因為是多個 之間存在相互的關聯 其中乙個 屬於管理者,管理其他 的各種使用者資訊 因此在編寫自動化測試用例的時候,需要同時開啟這幾個 並且可以自由來回切換。由於自動化測試的框架和基礎元件以及公共方法是我幫他們做出來的,於是,測試部的同事們把這個任務又交給了我這邊。我提出了兩個方案,並...

BootStrap 頁籤切換失效的解決方法

概述 bootstrap開發標籤頁時,標籤頁顯示正常,但點選時候對應mcnibva內容區域沒有變化。具體症狀與解決方案 1.標籤頁ui出現,但點選無反應,標籤頁ui並未隨點選進行切換 先檢查bootstrap.css,jquery.js和bootstrap.js是否有正確引入,並保證引入順序jque...

訪問母版頁控制項及屬性

1 通過findcontrol找控制項id 需要在此事件中 因為page load中時是先內容頁載入然後才是母版頁載入 protected void page loadcomplete object sender,eventargs e 2 通過強引用 page language c masterp...