2012-11-19 19 views
1
  1. 當Visual Studio Designer嘗試渲染WinForms類時,將調用哪些方法?
  2. 當Winforms類從另一個WinForms類繼承時會發生什麼?

回答

0

是我的發現:

  1. 如果您在具有YourClass.Designer.cs文件的VS Designer中打開表單,則:
    • 在YourClass.Designer.cs定義的屬性/字段將被new'ed
    • 了 「的InitializeComponent()」 方法將被調用

注:奇怪的是,你的構造WILL不是被調用,你可以用類似下面的東西來證明這一點(注意,設計者可以用下面的代碼):

public class YourClass ... { 
    public YourClass() { 
    throw new Exception("Ha (1)!"); 
    InitializeComponent(); 
    throw new Exception("Ha (2)!"); 
    } 
} 
  1. 如果類沒有SomeControl.Designer.cs文件,或者它是您在VS Designer中打開的類中的組件,那麼將調用該組件的構造函數。你可以再次用上面的例子來測試它。
0

當Winforms類從另一個WinForms類繼承時會發生什麼?

在過去,我使用WinForm繼承來強制窗體之間的標準佈局 - 排序主窗體。在設計模式中,添加到父窗體的任何控件都將顯示在子窗體中。您不能直接從子窗體設計器編輯父窗體。

1

簡而言之,即使存在窗體繼承,設計者也會調用窗體的構造函數和所有涉及的方法。

如果你想避免自己的組件/控件一些代碼,你可以這樣嘗試這裏後發現設計模式是上,

DesignMode with Controls

https://github.com/lextm/ActionListWinForms/issues/1

+0

所以在構造函數中的所有方法只?那InitializeComponent呢?或者隱含在構造函數中? – Denis

+0

OnLoad呢? – Denis

+0

InitializeComponent是構造函數的一部分,而OnLoad不是。實際上,您可以使用Visual Studio調試Visual Studio,以查看哪些方法已被調用。 –

相關問題