1. 程式人生 > >C#當窗體大小改變時,窗體中的控制元件大小也隨之改變

C#當窗體大小改變時,窗體中的控制元件大小也隨之改變

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace WindowsApplication3
{
publicpartialclass Form1 : Form
{
/*******************設定程式中可能要用到的用以儲存初始資料的動態陣列及相關私有變數*****************************
*/private ArrayList InitialCrl =new ArrayList();//用以儲存窗體中所有的控制元件名稱private ArrayList CrlLocationX =new ArrayList();//用以儲存窗體中所有的控制元件原始位置private ArrayList CrlLocationY =new ArrayList();//用以儲存窗體中所有的控制元件原始位置private ArrayList CrlSizeWidth =new ArrayList();//用以儲存窗體中所有的控制元件原始的水平尺寸private ArrayList CrlSizeHeight =new
ArrayList();//用以儲存窗體中所有的控制元件原始的垂直尺寸privateint FormSizeWidth;//用以儲存窗體原始的水平尺寸privateint FormSizeHeight;//用以儲存窗體原始的垂直尺寸privatedouble FormSizeChangedX;//用以儲存相關父窗體/容器的水平變化量privatedouble FormSizeChangedY;//用以儲存相關父窗體/容器的垂直變化量 privateint Wcounter =0;//為防止遞迴遍歷控制元件時產生混亂,故專門設定一個全域性計數器public Form1()
{
InitializeComponent();
}

privatevoid Form1_Load(object sender, EventArgs e)
{
GetInitialFormSize();
//this.AutoScroll = true;
//this.SetAutoSizeMode(FormSizeWidth,FormSizeHeight);
//this.AutoScrollMinSize.Width = FormSizeWidth;
//this.AutoScrollMinSize.Height = FormSizeHeight;GetAllCrlLocation(this);
GetAllCrlSize(
this);
}
publicvoid GetAllCrlLocation(Control CrlContainer)//獲得並存儲窗體中各控制元件的初始位置{
foreach (Control iCrl in CrlContainer.Controls)
{
if (iCrl.Controls.Count >0)
GetAllCrlLocation(iCrl);
InitialCrl.Add(iCrl);
CrlLocationX.Add(iCrl.Location.X);
CrlLocationY.Add(iCrl.Location.Y);
}
}

publicvoid GetAllCrlSize(Control CrlContainer)//獲得並存儲窗體中各控制元件的初始尺寸{
foreach (Control iCrl in CrlContainer.Controls)
{
if (iCrl.Controls.Count >0)
GetAllCrlSize(iCrl);
CrlSizeWidth.Add(iCrl.Width);
CrlSizeHeight.Add(iCrl.Height);
}
}

publicvoid GetInitialFormSize()//獲得並存儲窗體的初始尺寸{
FormSizeWidth
=this.Size.Width;
FormSizeHeight
=this.Size.Height;
}

privatevoid Form1_SizeChanged(object sender, EventArgs e)
{
// MessageBox.Show("窗體尺寸改變");Wcounter =0;
int counter =0;
if (this.Size.Width < FormSizeWidth ||this.Size.Height < FormSizeHeight)
//如果窗體的大小在改變過程中小於窗體尺寸的初始值,則窗體中的各個控制元件自動重置為初始尺寸,且窗體自動新增滾動條{
foreach (Control iniCrl in InitialCrl)
{
iniCrl.Width
= (int)CrlSizeWidth[counter];
iniCrl.Height
= (int)CrlSizeHeight[counter];
Point point
=new Point();
point.X
= (int)CrlLocationX[counter];
point.Y
= (int)CrlLocationY[counter];
iniCrl.Bounds
=new Rectangle(point, iniCrl.Size);
counter
++;
}
this.AutoScroll =true;
}
else//否則,重新設定窗體中所有控制元件的大小(窗體內所有控制元件的大小隨窗體大小的變化而變化){
this.AutoScroll =false;
ResetAllCrlState(
this);
}
}

publicvoid ResetAllCrlState(Control CrlContainer)//重新設定窗體中各控制元件的狀態(在與原狀態的對比中計算而來){
FormSizeChangedX
= (double)this.Size.Width / (double)FormSizeWidth;
FormSizeChangedY
= (double)this.Size.Height / (double)FormSizeHeight;

foreach (Control kCrl in CrlContainer.Controls)
{
/*string name = kCrl.Name.ToString();
MessageBox.Show(name);
MessageBox.Show(Wcounter.ToString());
*/if (kCrl.Controls.Count >0)
{
ResetAllCrlState(kCrl);
}
Point point
=new Point();
point.X
= (int)((int)CrlLocationX[Wcounter] * FormSizeChangedX);
point.Y
= (int)((int)CrlLocationY[Wcounter] * FormSizeChangedY);
kCrl.Width
= (int)((int)CrlSizeWidth[Wcounter] * FormSizeChangedX);
kCrl.Height
= (int)((int)CrlSizeHeight[Wcounter] * FormSizeChangedY);
kCrl.Bounds
=new Rectangle(point, kCrl.Size);
Wcounter
++;
}
}
}
}

相關推薦

C#窗體大小改變窗體控制元件大小隨之改變

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.For

C#匯出 Excel 生成 CheckBox 控制元件

在使用 Microsoft.Office.Interop.Excel 元件匯出Excel 表格時,要把匯出前的  CheckBox 控制元件一同匯出到 excel 表格中,對於這個功能 看似很簡單,但 Microsoft.Office.Interop

WPFS資料繫結(要是後臺類物件的屬性值發生改變通知在“客戶端介面與之繫結的控制元件值”發生改變需要實現INotitypropertyChanged介面)

WPFS資料繫結(要是後臺類物件的屬性值發生改變,通知在“客戶端介面與之繫結的控制元件值”也發生改變需要實現INotitypropertyChanged介面) MainWindow.xaml 1 <Window x:Class="WpfApplication1.MainWindow" 2

android開發控制元件大小和字型大小的選擇

1.dp:在控制元件邊距大小的選擇中選擇dp(density-independent pixel),這樣系統邊距就是畫素密度無關,在設定邊距、內邊距或者任何不打算按畫素值指定尺寸的情況下,通常都使用dp這種單位。 2.sp:scale-independent pixel,

C#窗體大小改變控制元件的位置和大小隨之改變

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.For

activity改變我們如何處理它

速度 change 假設 IT super conf In develop aras 用戶和系統觸發-的事件,可能造成一個activity狀體的改變。這個文檔描述了一些常見的情況,和如何去處理這些改變。 原網站:https://developer.android.googl

MFC 控制元件大小窗體改變改變大小-OnSize

轉載:https://blog.csdn.net/zhoxier/article/details/7776128 一個基於對話方塊的MFC介面,怎麼樣才能讓對話方塊裡的控制元件能和對話方塊同比例變小變大?今天我一直想解決這個問題,這是師姐留給我的任務。經過在網上的大量搜

C#控制元件大小窗體大小等比例變化

C#控制元件大小隨窗體大小等比例變化 轉載自:http://www.knowsky.com/898409.html 相信很多博友在開發初次接觸學習C# winForm時,當窗體大小變化時,窗體內的控制元件並沒有隨著窗體的變化而變化,最近因為一個專案工程的原因,也需要解

C#窗體設計:自動調整控制元件大小

新建一個C#應用程式,應用程式命名為Change 窗體介面設計如下 雙擊窗體新增Load()函式,函式中新增一下程式碼: private void Form1_Load(object sender, EventArgs e)      

C# Winform 控制元件大小窗體大小等比例縮放

當你的程式設計能力有了一定提升之後,那你在敲程式碼的時候就得開始想想怎麼將自己的寫的程式碼元件化了。所謂元件化,就是將程式碼中公共模組的程式碼提取出來作為一個方法或函式,使其能夠被其他程式或者他人直接使用。 public Form1() {

C語言之定義一個函式實現對字串做如下操作:字元為字母大小寫互換字元為數字原樣輸出有其它字元出現時結束操作返回已處理的字串

Action(){       char str[]={"tEst234%^road"};int len = sizeof(str)/sizeof(char);//strTest2呼叫函式lr_output_message("%s",strTest2(str,len)); r

圖形學之C語言OpenGL實現三角形繞其中心旋轉點選右鍵選單改變大小和顏色鍵盤按鍵控制旋轉的開始和暫停等功能

一、  實驗要求1.使用滑鼠選擇視窗內任意位置畫N個等腰三角形。2.要畫的三角形大小及顏色通過右鍵彈出選單選定(任選M個顏色)。3.設定三角形繞其中心旋轉的開始、停止、旋轉方向的功能鍵,並通過相應按鍵控制三角形旋轉。二、  完成情況由於沒能實現在滑鼠任意選定的位置畫三角形並且

ORA-03206表空間不夠如何以添加數據文件的方式擴展表空間

style 創建表空間 mage all 註意 flow ada -- 導入 準備導入一個數據庫,大約為33G,開始創建的空庫表空間為自增到20G,結果自然不夠,然後就開始自動擴展表空間大小 使用的如下語句 --自動擴展表空間大小 ALTER DATABASE DA

故障來襲如何證明你的網絡沒問題

class 4.4 ping不通 上傳 bsp 公眾 最大 人的 eply 有人說網絡工程師是整個IT行業中最可能受氣的工種。其實這一點捷個本人也不否認,因為你管理的網絡,是所有服務器、終端相互通信的基礎。如果有電腦上網不正常,或者是訪問網絡中的某一臺服務器出現異常現象,所

快速冪取模(數很大相乘long long會超出的解決辦法)

結合 超出 但是 long 數字 也會 連續 return result 當幾個數連續乘最後取模時,可以將每個數字先取模,最後再取模,即%對於*具有結合律。但是如果當用來取模的數本身就很大,采取上述方法就不行了。這個時候可以借鑒快速冪取模的方法,來達到大數相乘取模的效果。

虛擬機崩潰你要怎麽做

blog usr 硬盤容量 tails 鏡像 而是 font snapshot 啟動 使用虛擬機做嵌入式開發,千萬不要一整個盤掛載到/root,如果你這樣做了,這絕對是噩夢的伏筆。 IF( 你的虛擬機不幸崩潰了 ) { 第一步:不要慌張 當你的虛擬機崩潰無

[譯] 設計師的決策樹:遇到豬隊友你需要一個系統來控制每個人

原文地址:A Decision Tree for Designers 原文作者:Cap Watkins 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m… 譯者:zhmhhu 校對者:calpa, Wangalan30

try、catch有returnfinally的程式碼會執行麼?

總結: 1、不管有沒有異常,finally中的程式碼都會執行 2、當try、catch中有return時,finally中的程式碼依然會繼續執行 3、finally是在return後面的表示式運算之後執行的,此時並沒有返回運算之後的值,而是把值儲存起來,不管finally對該值做任何

redis lpop key key不存在返回nil , 監測redis執行語句是否正常執行

Lpop key   返回值:       列表的頭元素。       當key 不存在時, 返回 nil .    需求:  開發在執行 lpop key 時, 出現問題 , 執行語句卡住,

Scala引數超過22通過實現Product特質

在使用Spark做某些專案時,可能對某寫資料進行分析時,會出現有很多欄位,而Scala中,預設的最大的引數個數是22,因此如果當我們的欄位太多時 ,22欄位不能滿足,我們可以同過實現Product這個特質,實現裡面的方法,可以傳更多的欄位 object Demo01 { def ma