적응 사이즈 폼의 WinForm

1. 클래스 추가 
클래스 AutoSizeFormClass { //. (1). 문 구조 초기 형태 및 그 제어의 기록 위치 및 크기. 구조체 controlRect 공공 { 공공 INT 왼쪽, 공공 INT 위는 , 너비 INT 공공 높이 INT 대중; } . // (2) 문 객체는 녹화가 목록 목록 nCtrl을 제어 할 수 없습니다 //; 통제 협회 때문에, 기록은 항상 현재 크기입니다. // 공개 목록 oldCtrl = 새 목록 ( ); // 여기가 수보다 적을 수는 서구가 필터링 것보다, 단지 중국어로 대체하고, 서부로 다시 변경하는 데 사용할 수있는 큰 공공 목록 <controlRect> oldCtrl = 새로운 목록 < controlRect> (); INT ctrlNo = 0;. // 1] . // 두 가지 기능을 생성하기 (3). 윈도우와 컨트롤의 초기 위치 및 크기를 기록) //(3.1, 보이드 controllInitializeSize 공개합니다 (mForm 제어) { controlRect CR; cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; oldCtrl.Add (CR); // 처음 한 번만 추가 "폼 자체"이다 하여 AddControl (mForm); // 윈도우 바디 컨트롤 또한 중첩 제어 (예 패널) 때문에 재귀 호출을 단독으로 추출 할 수 나머지 //이 .WindowState = (System.Windows.Forms.FormWindowState) (2) ; // 종료 후 최대화 제어의 초기 위치 및 크기를 기록하고 이후 // 0 - 평준화 ,. - 1의 최소화, 최대화 2- } 개인 무효하여 AddControl (대조군 CTL) { ctl.Controls에서의 foreach (제어는 C) {// ** 여기서, 제 1 아이 기록 제어 자체 후, 기록을 제어 // IF (c.Controls.Count> 0) //하여 AddControl (C) // 윈도우의 나머지 의한 재귀 호출 밖으로 분리 (예 : 패널) 생체 중첩 제어를 제어하는 것도 가능하다 controlRect objCtrl ; = c.Left objCtrl.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height; oldCtrl.Add (objCtrl) // ** 여기서, 제 1 기록 인 제어 자체가 자식 기록 제어를 제어 IF (c.Controls.Count> 0) 하여 AddControl (C) // 윈도우의 나머지 의한 재귀 호출 밖으로 분리 (예 : 패널) 생체 중첩 제어를 제어하는 것도 가능하다 } } 적응 //(3.2 사이즈) 제어, 공공 무효 controlAutoSize합니다 (mForm 제어) { IF (ctrlNo == 0) {// 경우를 Form1_Load * 형태, 기록 원래 크기 및 위치 제어를 정상적으로하지 않는 문제 하지만 같은 자식 컨트롤의 DataGridView에 같은 일부 컨트롤이 아직 완료되지 않기 때문에, 문제가 될 것입니다 피부에 참여하려면, 소수의 처음에 // * Form1_SizeChanged에 양식을 때가 모든 자식 컨트롤 컨트롤 형성 한 원래 크기 및 위치의 제어를 기록 크기를 변경 controlRect CR; CR.Left = mForm.Left //; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; cR.Left = 0; cR.Top = 0] = cR.Width mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height; oldCtrl.Add (CR) // 번만 첨가 "자체를 형성"인 제 하여 AddControl (mForm); // 윈도우 생체 나머지 제어 재귀 석출하기 위해, 그래서 다른 제어 (예를 들면 패널)에 중첩 될 수있다 } 신구 형태 사이 // 비와, 플로트 wScale = (플로트) mForm.Width / (플로트) oldCtrl [0] .Width을 제 오래된 형태 플로트 hscale = (플로트) mForm.Height / (플로트) oldCtrl [0] // ;. .height의 높이; ctrlNo = 1; // 입력 = 1, 0 폼 자체 형태 상기 제어에서, 시퀀스 번호부터. 1 AutoScaleControl (mForm, wScale, hScale) ; // 윈도우의 나머지 의한 재귀 호출 밖으로 분리 (예 : 패널) 생체 중첩 제어를 제어하는 것도 가능하다 } 개인 무효 AutoScaleControl (제어 CTL을 wScale 플로트, 플로트 hscale)을 { ctrLeft0의 INT, ctrTop0, ctrWidth0, ctrHeight0; // INT ctrlNo = 1; 자체 양식 // 1은 왼쪽, 위쪽, 너비, 높이, 폼 컨트롤 시작에서 ctrlNo = 1 그래서 foreach는 (CTL의 제어 다. 제어) {// ** 여기서, 첫번째 아이 줌 조절을 제어 컨트롤 자체 스케일링 // IF (c.Controls.Count> 0) // AutoScaleControl (C, wScale, hscale); // 양식 나머지 컨트롤 인해 재귀 호출 제어 (예컨대 패널), 석출 중첩 될 수 ctrLeft0 = oldCtrl [ctrlNo] .Left; ctrTop0 = oldCtrl [ctrlNo] .Top; ctrWidth0 = oldCtrl [ctrlNo] .Width; ctrHeight0 = oldCtrl [ctrlNo] .height의; //c.Left = (INT) ((ctrLeft0 - wLeft0) * wScale) + wLeft1, 신구 제어 간의 선형 비례 // //c.Top = (INT) ((ctrTop0 - wTop0) * H) + wTop1; c.Left = (INT) ((ctrLeft0) * wScale) 신구 // 컨트롤 간의 선형 비례. 전용 제어 형태에 대하여 위치, 그것을 추가 할 수 wLeft1 + c.Top = (INT) ((ctrTop0) * hscale) // c.Width = (INT) (* ctrWidth0 wScale) // 원래의 크기 관련된 현재 폭 (INT)을 곱한 수 (* c.Width W) c.Height = (INT) (* ctrHeight0의 hscale) // ctrlNo ++; // 누적치 // ** 여기에, 스케일링 자체를 제어하는 제어의 스케일링 된 아이들 (c.Controls.Count> 0) 경우 AutoScaleControl (C, wScale, hscale); // 윈도우의 나머지 (예를 들면 패널) 생체 중첩 제어를 제어하는 것도 가능하고, 분리 할 때문에 재귀 호출을 철회 (CTL은 DataGridView를 IS) IF { DataGridView에 DGV CTL이있는 DataGridView = AS; Cursor.Current = Cursors.WaitCursor; INT 폭 = 0; 경우 (이 I ++; I는 I = dgv.Columns.Count <0 INT) { dgv.AutoResizeColumn (I, DataGridViewAutoSizeColumnMode.AllCells)를 // 열 자동 + = dgv.Columns [I] .Width 너비 //; 계산 셀의 행과 열 폭으로 조정 } IF (폭> = ctl.Size.Width) // 열 폭 설정 조정 열의 폭보다 큰 경우 dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells // 자동 조정 모드의 항목 다른 DGV. AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 충전보다 작은 경우 } Cursor.Current = Cursors.Default; } } }

2. 인스턴스

     새로운 크기 조정을 자동 조정 () =로;

3.Form1_Load

     as.controllInitializeSize (이 께);

4. Form1에 _SizeChanged 이벤트

     as.controlAutoSize (이 께);

적응 제어의이 실현 윈도우 폼의 크기

추천

출처www.cnblogs.com/xfcode/p/11769307.html