2012-11-28 40 views
3

如何將控件的大小重置爲其在Windows窗體中的默認大小?將控件的大小重置爲其默認值

我試着將大小設置爲(-1,-1),但這並不起作用,儘管Height被設置爲默認值。

+0

它是什麼默認大小? –

+1

@ArsenMkrt它的大小,當你第一次創建它。 – Rotem

+0

是否嘗試在加載時保存它,並在您想要重置時重新指定? –

回答

4

您可以使用反射來獲取控件的DefaultSize屬性。

Size GetDefaultSize(Control ctrl) 
{ 
    PropertyInfo pi = ctrl.GetType().GetProperty("DefaultSize", BindingFlags.NonPublic | BindingFlags.Instance); 
    return (Size)pi.GetValue(ctrl, null); 
} 

myCtrl.Size = GetDefaultSize(myCtrl); 

MSDN

的DefaultSize屬性表示控件的大小時 最初創建它。

+0

DefaultSize是受保護的屬性。 – LarsTech

+0

@LarsTech更新了使用反射的答案。 – Rotem

0

我修改了下面的代碼,現在工作。

public struct myControl 
{ 
    public string name; 
    public Size size; 
} 

List<myControl> lstControlSize = new List<myControl>(); 
myControl defControl = new myControl(); 

public Form1() 
{ 
    InitializeComponent(); 
    SaveAllControls(); 
} 

public void SaveAllControls() 
{ 
    foreach (Control defaultControl in this.Controls) 
    { 
     if (defaultControl != null) 
     { 
      defControl.name = defaultControl.Name; 
      defControl.size = defaultControl.Size; 
      this.lstControlSize.Add(defControl); 
     } 
    } 
} 

public void ResetSizeAllControls() 
{ 
    foreach (myControl defaultControl in this.lstControlSize) 
    { 
     foreach (Control resizeControl in this.Controls) 
     { 
      if (resizeControl != null) 
      { 
       if (resizeControl.Name == defaultControl.name) 
       { 
        resizeControl.Size = defaultControl.size; 
        break; 
       } 
      } 
     } 
    } 
} 
+0

這不起作用,因爲您要保存對控件的引用,您沒有捕獲大小。而且,在調用'InitializeComponent()'之後,您還是這樣做了,其中大小無論如何都會改變。 – Rotem

+0

** SaveAllControls()**將把窗體上的所有控件保存到集合中,同時保存控件的大小。當調用** ResetSizeAllControls()**時,窗體上的所有控件大小將被集合中的默認控件大小替換。 – YD4

+0

你測試過了嗎? – Rotem