2017-07-31 40 views
1

我有一個應用程序需要適應不同屏幕尺寸(分辨率)的範圍。 大部分我使用表格佈局面板完成。更改應用程序中所有控件的字體大小(獲勝窗體)

但是一些控件(主要是按鈕和標籤)的字體太大,文本不適合控件。 到目前爲止,我已經設法改變一些控件的字體採用

  if (Screen.PrimaryScreen.Bounds.Width < 1440) 
     { 
      button_5.Font = new Font("Impact", button_5.Font.Size - 4); 
     } 

但是,這是太多的文字添加應用程序中的每一個控制。

有沒有辦法一次更改應用程序上所有控件的字體? 或者至少是表單上的所有控件?

+0

每窗體是一個控件容器,其中的控件屬性列出了該窗體上的所有控件。當一個控件本身就是一個控件容器(面板,groupbox)時,它具有一個Controls集合以及由該容器託管的控件。這是相對容易的建立一個遞歸函數,循環你的表格的所有控制 – Steve

+0

你可能給我一個這樣的功能的例子,所以我可以建立我所需要的? – Martynas

+0

我設法使用 foreach(控制Ctrl在tableLayoutPanel1.Controls中) ctrl.Font = new Font(「Impact」,ctrl.Font.Size - 4); } 但不知道如何訪問整個窗體的所有控件呢。 – Martynas

回答

1

簡單的遞歸函數將遍歷表單中的所有控件並更改字體大小。你需要測試對你的控制,並看看效果,因爲在這段代碼有沒有異常處理

public void SetAllControlsFont(ControlCollection ctrls) 
{ 
    foreach(Control ctrl in ctrls) 
    { 
     if(ctrl.Controls != null) 
      SetAllControlsFont(ctrl.Controls); 

     ctrl.Font = new Font("Impact", ctrl.Font.Size - 4); 

    } 
} 

您可以從頂層的形式把它經過初始窗體的控件集合

SetAllControlsFont(this.Controls); 
+0

這隻會更改第一個表格佈局面板的字體,但不會循環控制的其餘部分。 – Martynas

+0

如果_this.Controls_是Form.Controls集合,則情況不應該如此。層次結構的頂層 – Steve

+0

它可能與'this.Controls'只包含'{System.Windows.Forms.TableLayoutPanel,BorderStyle:System.Windows.Forms.BorderStyle.None}'這個事實有關,它不是'即使在窗體上的實際控制,只是控制的類型。 – Martynas