我陷入了一個問題,並會感謝任何幫助或指針,我可以得到。 我想開發一個基於用戶選擇的應用程序,加載給定的用戶控件來收集一些信息。 所有的用戶控件都是自定義的,但它們都具有相同的公共方法 - 清除,獲取字符串值等。 在執行應用程序期間,我需要能夠調用這些方法。 這是我已經試過:訪問動態加載的用戶控制方法
public partial class frmDesktop : Form
{
private UserControl active = new UserControl;
private UserControl GetActiveUsrCtrl(AppEnum.Catalog catalogId, frmMain parent)
{
UserControl ctrl= null;
switch (catalogId)
{
case AppEnum.Catalog.XYZ_Catalog:
XYZCtrl _XYZCtrl = new XYZCtrl(parent);
ctrl = _XYZCtrl;
break;
case ...
}
return ctrl;
}
private void frmDesktop_Load(object sender, EventArgs e)
{
...
// load the user control into the panel
activeCtrl = GetActiveUsrCtrl(catalogId, parent);
pUserControlContainer.Controls.Add(activeCtrl);
...
}
我試圖讓事情變得簡單,體積小,在「GetActiveUsrCtrl」
我使用空用戶控制和我的控制分配給它。
按預期方式工作並將所需用戶控件加載到面板中。
我遇到的問題是調用控件的公共方法。 由於我加載用戶控件的方式,當我嘗試使用反射來調用該方法時,我得到一個NullReferenceException
。
婁這是我使用的代碼示例:
Private void button1_Click(object sender, EventArgs e)
{
Type tp = null;
MethodInfo mtd = null;
tp = hActiveUsrCtrl.GetType();
mtd = tp.GetMethod("GetData");
string Criteria = (mth.Invoke(hActiveUsrCtrl, null)).ToString();
}
是什麼,我想在這裏甚至可能嗎?
謝謝。
你不必做反思。你爲什麼不用類型化你的用戶控件並訪問它的屬性,例如'((MyUserControl1)hActiveUsrCtrl).MyMethod();' – 2013-03-18 13:28:20
我試圖避免爲每一個用戶控件做這個 - 現在我有大約20不同的,但我知道會有更多... – user2139806 2013-03-18 13:33:03