C #의 WinForm 적응 제어 폰트 크기

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; 
                } 
            } 
        } 

    } 
}

  

추천

출처www.cnblogs.com/baissy/p/11724026.html