我知道這個問題之前已被問過。我有代碼來做到這一點,但我得到了一個錯誤,我想我知道爲什麼,但我只是真的進入.Net反射,所以我想確認我是否正確。從我的項目中檢索所有表格
這是代碼。我想從我的項目中檢索所有基本類型爲「BaseEditForm」的表單,然後檢索所有以「EditForm」結尾的表單,我想將它們放入列表中以填充ListBox。
public void LoadAllEditForms()
{
formsList = new List<string>();
try
{
Assembly project = Assembly.Load("UnionAdministrator");
foreach (Type t in project.GetTypes())
{
if (t.BaseType == typeof (BaseEditForm))
{
var emptyCtor = t.GetConstructor(Type.EmptyTypes);
if (emptyCtor != null)
{
var f = (Form) emptyCtor.Invoke(new object[] {});
if (f.Name.EndsWith("EditForm"))
formsList.Add(f.Name);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我收到錯誤消息「對象引用未設置爲對象的實例」。上線
var f = (Form) emptyCtor.Invoke(new object[] {});
emptyCtor不爲空,除此之外,如果emptyCtor爲null,則無法達到此點。所以我對這個錯誤信息感到困惑。所以這是我的問題。爲了這個正常工作,我所有的表單都必須有一個默認的構造函數?幾乎所有的表單都有一個帶有一個或多個參數的構造函數。這是我的問題嗎?
也許是鑄造'(表格)'。嘗試做一個'emptyCtor.Invoke(new object [] {})作爲Form'並檢查'f'爲null – 2014-10-10 17:13:21
有點懷疑你在代碼中包含try/catch時是否確定了正確的行。你顯示的消息框也將非常無益,它不會說任何有用的東西。它實際上*看起來像那樣,還是你正確地顯示了InnerException? – 2014-10-10 18:43:20