2011-06-14 70 views
1

我有一個MDI表格和幾個SDI形式。現在我將爲所有sdi表單創建一個基本表單並編寫一個函數,它將啓用和禁用我的sdi表單上的控件,但我不會從子sdi表單明確調用該函數。基本上我所有的sdi都會擴展這個基本形式。所以請告訴我有什麼方法可以在我的sdi表單的構造函數調用完成後自動調用基本形式的特定函數。關於在贏得應用程序sdi窗口的基本形式c#

另一個問題是,我可以從基本形式訪問子窗體或sdi窗體的控件,因此我可以啓用&禁用它。所以請告訴第二種方法是自動調用基本形式的函數,因爲從sdi我將不會像base.funcname()那樣明確地調用該函數,而另一個如何從sdi窗體訪問控制基本形式。

感謝

回答

1

在你柴油的構造ied類,你可以在基類上調用一個方法。

public class MyBaseForm : Form 
{ 
    protected void SomeIntitializationMethod() {...} 
} 

public class MyDerivedForm : MyBaseForm 
{ 

    public MyDerivedForm() 
    { 
     base.SomeInitializationMethod(); 
    } 
} 

你不能在基類的東西執行派生的構造函數執行後沒有顯式調用它,所以你可能限於此。

對於第二個問題,因爲它是Form對象的一部分,所以始終可以訪問基本窗體上的Controls集合。

1

它「聽起來像」你想有孩子SDI形式跟父基本形式,在這種情況下,嘗試使用事件:

在孩子SDI形式:

public partial class ChildForm : Form 
{ 
    public delegate void DisableBaseHandler(object sender, EventArgs e); 
    public event DisableBaseHandler DisableBase; 

    public ChildForm() 
    { 
    InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
    OnDisableBase(); 
    } 

    private void OnDisableBase() 
    { 
    if (DisableBase != null) 
     DisableBase(this, new EventArgs()); 
    } 
} 

,並在父基本形式:

public partial class BaseForm : Form 
{ 
    private ChildForm _OtherForm; 

    public BaseForm() 
    { 
    InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
    if (_OtherForm == null || _OtherForm.IsDisposed) 
    { 
     _OtherForm = new ChildForm(); 
     _OtherForm.DisableBase += new ChildForm.DisableBaseHandler(DisableMe); 
    } 
    _OtherForm.Show(); 
    } 

    private void DisableMe(object sender, EventArgs e) 
    { 
    //Disable Base Controls... 
    button1.Enabled = false; 
    } 
} 
相關問題