C#視窗控制元件大小隨視窗大小而改變
阿新 • • 發佈:2019-02-15
自己寫了個類,可以實現視窗大小發生改變時,視窗內的控制元件大小也隨之改變(等比例),
不過呼叫要有點小技巧,後面再說,類的程式碼如
呼叫的話,宣告應該要宣告全域性的,但例項化要在函式內,一般可以在建構函式中,也可以在視窗的Load事件中都行,但宣告的時候不能直接例項化(當然,如果你能在方法外使用this關鍵字的話可能就可以),下面是一個呼叫的例子:/// <summary> /// 視窗控制元件大小變化隨視窗等比變化 /// </summary> public class MyResize { /// <summary> /// 記錄改變前視窗的大小 /// </summary> Size originalSize; /// <summary> /// 記錄改變前視窗的大小 /// </summary> public Size OriginalSize { get => originalSize; set => originalSize = value; } /// <summary> /// 在水平方向上的比例 /// </summary> float Xratio = 1; /// <summary> /// 在垂直方向上的比例 /// </summary> float Yratio = 1; /// <summary> /// MyResize類例項化 /// </summary> public MyResize(Form f) { OriginalSize = f.Size; } private MyResize() { ///不允許無參構造 } /// <summary> /// 根據視窗大小,自動調整控制元件大小,不支援容器的子控制元件! /// </summary> /// <param name="f1">要調整的視窗</param> /// <returns></returns> public void Resize(Form f1) { Xratio = (float)f1.Size.Width / (float)originalSize.Width; Yratio = (float)f1.Size.Height / (float)originalSize.Height; foreach (Control a in f1.Controls) { a.Size = new Size((int)(a.Size.Width * Xratio), (int)(a.Size.Height * Yratio)); a.Location = new Point((int)(a.Location.X * Xratio), (int)(a.Location.Y * Yratio)); } originalSize = f1.Size; }
TP:為了方便使用,我將它弄成了類庫(雖然只是有個類 — . —)。