System.Collections.Generic은 USING는, 상기 System.Drawing을 사용하여, 상기 System.Windows.Forms를 사용하여, 공간 WGClient { 클래스 AutoSizeFormClass { //. (1) 문 구조 초기 형태 및 그 제어의 기록 위치 및 크기. 구조체 controlRect 공공 { 공공 INT 왼쪽, 공공 INT 위는 , 너비 INT 공공 높이 INT 공개, 부동 소수점 폰트 크기 대중, 대중 FontFamily를 FontFamily를가; } . // (2) 문 객체는 녹화 목록 목록 nCtrl을 제어 할 수 없습니다 // ; 제어의 관계 때문에, 기록은 항상 현재의 크기입니다. // 공개 목록 oldCtrl = 새 목록 ( ); // 서양은 필터링 것보다, 단지 중국어로 대체 될 수있다 여기에이 수보다 적게됩니다 큰되고, 텍스트의 사용은 당신이 서부로 다시 변경하려면 공개 목록 <controlRect> oldCtrl = 새로운 목록 <controlRect> (); ctrlNo = 0 INT // 1;. . //. (3) 두 개의 함수를 만들 수는 ) //(3.1 초기 위치와 윈도우의 크기와 제어 기록 공개 무효 controllInitializeSize합니다 (mForm 제어) { controlRect CR 단계; cR.Left mForm.Left =; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; cR.FontSize = mForm.Font.Size; cR.FontFamily = mForm.Font.FontFamily; oldCtrl .Add (CR)이 상기 제 1 번만 추가 "폼 자체"이다 // 하여 AddControl (mForm) 본체 제어창의 // 나머지는 중첩 제어 (예컨대 패널) 때문에, 단독으로 추출 할 수있다 재귀 호출 개인 무효하여 AddControl (제어 CTL) { //this.WindowState = (System.Windows.Forms.FormWindowState)을 (2) ; // 다음, 제어의 초기 위치와 크기의 기록이 완료 한 후에 극대화 0 // - 평준화 ,. - 1의 최소화, 최대화 2- } foreach는 (ctl.Controls에서 컨트롤 C) {// ** 여기서, 기록 제어 자체 후, 제 아이 기록을 제어 // 경우 (c. .Controls.Count> 0) //하여 AddControl (C)가 // 본체 제어창의 나머지 또한 내포 될 수 제어 (예로서 패널) 때문에 재귀 호출 밖으로 분리 ; controlRect objCtrl objCtrl.Left = c.Left; objCtrl = c.Top .top; objCtrl.Width = c.Width; objCtrl.Height = c.Height; objCtrl.FontSize = c.Font.Size; objCtrl.FontFamily = c.Font.FontFamily; oldCtrl.Add (objCtrl); // ** 여기에, 최초의 기록 컨트롤 자체가, 아이가 컨트롤을 녹음 후 제어 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; = mForm.Height cR.Height; cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height; cR.FontSize = mForm.Font.Size; = mForm.Font.FontFamily cR.FontFamily; { oldCtrl.Add (CR) // 제 한 번만 추가, "폼 자체", 등 하여 AddControl (mForm) 재귀 호출을 석출되도록 // 윈도우의 나머지 다른 제어 컨트롤 (예컨대 패널)에 중첩 될 수있다 } 플로트 wScale = (플로트) mForm.Width / (플로트) oldCtrl [0] .Width를 / / 이전 및 새로운 형태의 비는 제 레거시로 형성 플로트 hscale = (플로트) mForm.Height / (플로트) oldCtrl [0] .height의 // 높이 ;. 플로트 fontSizeScale = (플로트) mForm.Font한다. 크기 / (플로트) oldCtrl [0] .FontSize]. 폰트 크기 // ctrlNo = 1; // 입력 = 1, 0의 형태 자체가 윈도우 컨트롤의 본체로부터 시작되는 일련 번호 AutoScaleControl (mForm, wScale, hScale, fontSizeScale) (예) 패널로서 // 본체 제어창의 나머지는 중첩 될 수있다 컨트롤 의한 재귀 호출 밖으로 분리 } , hscale 개인 공극 AutoScaleControl (제어 CTL, 플로트 wScale 플로트를 플로트 fontSizeScale)는 부동 소수점 fontSize는; ctrLeft0의 INT, ctrTop0, ctrWidth0, ctrHeight0, FontFamily를의 font; // INT ctrlNo = 1; 자체 양식 // 1은 왼쪽, 위쪽, 너비, 높이, 폼 컨트롤 그래서 ctrlNo = 1의 시작에서 foreach는 (컨트롤 C 에 ctl.Controls) {// ** 여기서, 첫번째 아이 줌 조절을 제어 컨트롤 자체 스케일링 // 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의; fontSize는 oldCtrl = [ctrlNo] .FontSize; = oldCtrl의 font [ctrlNo] .FontFamily; //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) // 원래의 크기 (* c.Width W)과 관련된, 그리고 현재 폭 (INT)을 곱한 수 c.Height = (INT) (* ctrHeight0의 hscale) // c.Font 폰트 새로운 새 = (의 font 상기 fontSize는 fontSizeScale *); ctrlNo ++; // 축적 수 // ** 여기에, 첫 번째 스케일링 컨트롤 자체 컨트롤의 확장 어린이 의 경우 (c.Controls.Count> 0) AutoScaleControl (C, wScale, hScale, fontSizeScale); // 몸 제어 창의 나머지도 중첩 될 수 있습니다 컨트롤 ( 예컨대 패널) 때문에 재귀 호출하려면을 석출 (CTL이있는 DataGridView 경우) { 상기 된 DataGridView CTL DGV에게 된 DataGridView = AS Cursor.Current = Cursors.WaitCursor 단계; INT 폭 = 0; INT (I = 0; I <dgv.Columns.Count는, I는 ++)에 대해 { dgv.AutoResizeColumn (I, DataGridViewAutoSizeColumnMode.AllCells) / / 열 자동 + = dgv.Columns [I] .Width 너비 ; // 셀 행과 열의 폭 조정 계산 } dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode .Fill; // 충전은보다 작은 경우 IF (폭> = ctl.Size.Width) // 열 폭 설정 조정 열의 폭보다 크면 dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells // 자동 조정 모드의 항목 다른 Cursor.Current = Cursors.Default; } } } } }