看起來在CF上沒有用於usercontrol的Load事件。CompactControl for UserControl上的No Load事件?
我習慣在Load EventHandler上加載數據。
爲了達到這個目的,CF還有其他的選擇嗎?
到目前爲止看起來像我別無選擇,只能在用戶控件的構造器這樣做......
看起來在CF上沒有用於usercontrol的Load事件。CompactControl for UserControl上的No Load事件?
我習慣在Load EventHandler上加載數據。
爲了達到這個目的,CF還有其他的選擇嗎?
到目前爲止看起來像我別無選擇,只能在用戶控件的構造器這樣做......
我刪除了我之前的回答,因爲這是絕對的垃圾。你100%正確,CF沒有Load事件。事實證明,當我編寫UserControl時,我自己發現了這一點。我查找了一箇舊項目的加載事件,其中我所有的用戶控件都從我自己的基類繼承而來......名爲UserControlBase。
我似乎在我的基類中實現了我自己的Load功能。這是我的基類的削減版本:現在
public class UserControlBase : UserControl
{
public UserControlBase() { }
public event EventHandler Load;
private void Loaded()
{
if (this.Load != null)
{
this.Load(this, new EventArgs());
}
}
public new void ResumeLayout()
{
this.Loaded();
base.ResumeLayout();
}
public new void ResumeLayout(bool performLayout)
{
this.Loaded();
base.ResumeLayout(performLayout);
}
}
,在實際的用戶控件,請執行下列操作:
public partial class UserControl1 : UserControlBase
{
public UserControl1()
{
InitializeComponent();
}
private void UserControl1_Load(object sender, EventArgs e)
{
}
}
這是一個非常古老的項目。在後來的項目中,我傾向於在中調用用戶控件的.Load()
方法。
您可以使用EnabledChanged事件,並檢查控制首次啓用:
private void UserControl1_EnabledChanged(object sender, EventArgs e)
{
if (Enabled && firstTime)
{
firstTime= false;
//DO init
}
}
我會使用OnHandleCreated,但請記住,可以重新創建Control的句柄。
E.x:
private bool _loaded;
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
if(!_loaded)
{
_loaded=true;
DoLoad();
}
}
private void DoLoad()
{
}
OnHandleCreated()在InitializeComponent()之前調用! 我建議在InitializeComponent()之後調用DoLoad()。 – 2016-03-06 16:27:49
謝謝,我想我會在用戶控件一個簡單的Load方法去。在表單中,它將調用加載方法。 – pdiddy 2009-11-03 18:29:11
聽起來像一個很好的計劃! – GenericTypeTea 2009-11-04 07:11:26
嗯......這是什麼工作?如果引用了顯式的類型定義,「new」只會覆蓋該調用。如果通過UserControl或Control調用.ResumeLayout(),則不會調用「新」版本。 – Quibblesome 2009-11-06 20:02:40