本篇部落格只針對本人在嘗試做乙個介面放大問題中所遇到的一些問題:
目的: 實現視窗放大,視窗內的控制項也等比放大;(成功)
1.anchor屬性改變取得的效果不理想;
2.控制項放大比例不一樣;
3.在放大的過程**現介面亂(看起來軟體有點像盜版)
下面以下圖為例講解:
當我們設計好視窗後是這樣的:
當我們拉大時:
網上有很多方法使用了改變anchor屬性的方法;簡單說一下anchor屬性,就是讓空間到介面上下左右的距離不變,實現效果會很奇怪,我們來看一下操作:
anchor屬性新增嘗試
在控制項屬性中新增anchor屬性:
需要哪個方向直接將方向點灰就可以:
為了取得好點的效果,我們做出以下劃分:
其中紅色對應:top left,淡藍色對應:top,left,bottom,粉色對應bottom,left;
黑色對應:top,right,bottom;綠色對應right,top;紫色對應:bottom,right;
視窗拉動會感覺有脫節的樣子,而且縮小還會導致控制項重疊,雖然可以新增resize 事件來改變控制項的大小,但是anchor的屬性特性導致操作依然很機械,我們想要控制項等比例當大,間隔還要等比例放大感覺才協調的樣子;如果控制項少,介面簡單這些操作還可以,但是假如介面複雜;這樣操作估計要被老闆打回來。
因為anchor的嘗試讓我太失望了,所以我就沒有再去嘗試dock去改變的,老老實實的寫**老改變大小;
**控制放大後控制項大小
雙擊介面視窗進入load 函式:
新增其他函式:private
void
modular_calechophasefromsignal_load
(object sender,
eventargs e)
說明:這些**就是先遍歷視窗控制項,獲得控制項的高、寬、位置等屬性放在字串裡,然後通過視窗改變的比例等比例放大後再賦值給控制項對應的屬性。(**x,y位置報錯需要在前面的類裡新增float x=0和 float y=0哦)private
void
settag
(control cons)
}private
void
setcontrols
(float newx,
float newy,
control cons)
//遍歷窗體中的控制項,重新設定控制項的值
foreach
(control con in cons.controls));
//獲取控制項的tag屬性值,並分割後儲存字串陣列
float a = convert.
tosingle
(mytag[0]
)* newx;
//根據窗體縮放比例確定控制項的值,寬度
con.width =
(int
)a;//寬度
a = convert.
tosingle
(mytag[1]
)* newy;
//高度
con.height =
(int
)(a)
; a = convert.
tosingle
(mytag[2]
)* newx;
//左邊距離
con.left =
(int
)(a)
; a = convert.
tosingle
(mytag[3]
)* newy;
//上邊緣距離
con.top =
(int
)(a)
;single currentsize = convert.
tosingle
(mytag[4]
)* newx;
//字型大小
con.font =
newfont
(con.font.name, currentsize, con.font.style, con.font.unit);if
(con.controls.count >0)
}foreach
(control con in cons.controls)
}void
modular_calechophasefromsignal1_resize
(object sender,
eventargs e)
在字型那塊放大採用的高度放大採用的x的比列,是因為發現字型假如採用y的字型,當視窗向上拉伸的時候,字型也會放大,而且不僅是高度放大,而且長度也會變大,會讓lable標籤上的字被textbox蓋掉。所以在字型上在放大比例採用x方向放大的比例。
關於con.visible 採用的說明,這是解決視窗放大過程中發生暫時的紊亂現象,(雖然過時間很短,大概1s左右,但是能看見)經過思考,在未新增之前:各種空間重新計算位置高度等需要一定的時間,如果不改變可見性,就會視窗有點亂,所以在計算之前設定他不可見,計算之後再設定可見,那麼介面上直接出現的就是已經算好的位置,介面不會出線暫時的紊亂狀況。
(放大暫時出現的介面紊亂圖)
下面來說另外乙個大問題:就是控制項放大比例不一樣!看圖:
正常圖:縮小圖:放大圖依次為:
textbox後面的button與textbox高度上放大比例不一樣!還是挺影響美觀的, 怎麼解決這個問題呢,我想到是直接用resize時間將button的高度與textbox強制相等,(原諒我沒有想到聰明的方法,控制項少這種方法還是可行的,只是當控制項多起來的時候,這種方法就有些麻煩)加在視窗的resize事裡沒有用,放在textbox改變的事件裡:
這樣後基本完成了想要的樣子,但是為了防止過度的縮小出現控制項擠壓問題,我就把視窗設定成不可調的模式了,改變formborderstyle為fixeddialog,保留最大化與最小鍵。後面出現了一點點小問題就是在視窗初始化後textbox與它後面的buttom又不一樣大小了,於是於是在視窗初始化介面再次新增強制這兩個控制項高度相等的**。private
void
modular_genchirpsignal_resize
(object sender,
eventargs e)
注意!: 這裡的**只是調整了介面左右控制項的大小,假如介面上有圖示和,需要將圖示和也放大,不然調整的時候介面會出現跳、卡或者別的問題。
Winform控制項隨視窗等比例縮放
在建立winform視窗時,常常控制項不能隨視窗正確比例縮放。執行窗體如下 最大化後窗體 縮小後窗體 實現方法如下 在form1視窗下新增乙個panel工具,在父容器中停靠 然後在panel容器中放置我們需要的工具 新建乙個 nform 窗體類,繼承預設窗體類 form 而原來的 form1 for...
cad等比例縮放快捷鍵 cad等比例縮放快捷鍵
cad等比例縮放快捷鍵是s鍵c鍵。常用cad的快捷鍵還有取消前一步操作ctrl z 快速選擇alt tk 提取輪廓alt mup 重複執行上一步命令ctrl j 開啟特性對話方塊ctrl 1以及新建圖形檔案ctrl n等等。計算機輔助設計 computer aided design 指利用計算機及其...
AutoCAD中實現不等比例縮放
autocad中大多數物件都是不支援non uniform scale的,但我這兩天卻遇到了類似的需求,需要將線 多段線等物件進行不等比例縮放,比如x方向放大2倍,y方向放大0.4倍,於是就想著自己寫 實現,但轉換矩陣怎麼計算卻被難住了,自己看的書還是遠遠不夠啊!從書架上翻出的第一本書中有類似的公式...