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# Winform 一個可以用滑鼠改變控制元件位置大小的類,直接呼叫即可.....(程式碼收藏)

using System;   using System.Collections.Generic;   using System.Text;   using System.ComponentModel;   using System.Data;   using System.

VC中自動改變控制元件位置大小的對話方塊類

lxDialog.h檔案: ///////////////////////////////////////////////////////////////////////////////////// // 自動改變控制元件位置和大小的對話方塊類 // 檔名:lxDialog.h //

android 動態改變控制元件位置大小

動態改變控制元件位置的方法: setPadding()的方法更改佈局位置。 如我要把Imageview下移200px:             ImageView.setPadding( ImageView.getPaddingLeft(),  ImageView.get

MFC 設定控制元件位置大小

初始化對話方塊大小: ::SetWindowPos(this->m_hWnd, HWND_BOTTOM, 0, 0, 100, 500, SWP_NOZORDER); 最近經常要用到改變控制元件在對話方塊上的位置和大小,一直找不到有效的方法,查看了很多資料。這篇

C#解決動態新增控制元件控制元件閃爍的問題

近段時間一直用C#來做開發,但是C#控制元件太多或者動態新增的控制元件,控制元件一直一閃一閃的,始終不知道什麼問題。 各種度娘,沒去谷哥,因為上不去,你懂得。 翻遍了很多資料,都在說雙快取,還有什麼圖片什麼的,各種程式碼嘗試無效,之後看到CSDN一個帖子,看完之後發現這一段程式碼真的解決了閃爍的問題!原理我還

ListView優化控制元件報空指標。

 FATAL EXCEPTION: main                                   &n

iOS點選cell控制元件背景色消失的解決方法

同時呼叫一下兩個方法: - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; self.quickProfessionLabel

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

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

c#如何保持控制元件位置窗體同比例?C#實現窗體控制元件窗體大小改變(包括字型大小)

可以通過Dock屬性和Anchor屬性來控制 設定控制元件的 Anchor屬性 如果要隨著窗體變化而變化 則設定為Top, Bottom, Left, Right 當然也可以只設定期中幾個值 左邊的設定TOP,LEFT,中間設NONE,右邊的設right,bottom

activity改變我們如何處理它

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

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

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

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

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

C#實現窗體拖動、不允許窗體拖動、任意控制元件執行拖動

1、不允許窗體被拖動。即使點選藍色標題條。        程式碼片段,加入不想被拖動的窗體中即可         protectedoverridevoid WndProc(refMessage m)         {             base.WndProc(ref m);           

C#點選窗體最小化隱藏工作列顯示托盤圖示

在窗體的Deactivate事件上,寫以下程式碼: private void Form1_Deactivate(object sender, EventArgs e)

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

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

MFC控制元件位置窗體大小改變

      因為在做上位機,需要MFC中的控制元件位置隨窗體大小而改變,以下是程式碼:     首先初始化CRect m_rect,該成員變數用來記錄窗體的當前大小。 void CTEST4View::OnSize(UINT nType, int cx, int cy)

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

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

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

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

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

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