私の状況は次のとおりです。Visual C#2010 ExpressでWindowsフォームアプリケーションを開発中です。ユーザーがログインすると、データベース表からオプションをロードしてmenustripを作成します。そのテーブルでは、ID、オプション名、フォーム名を保存します。C#Reflection:文字列クラス名でオブジェクトをインスタンス化する
だから、それはメインクラスですContabilidad.csを持って、私のプロジェクトで、私はContabilidadという名前のフォームがあると、私は新しいフォームを作成したい場合は、私はこれを行うことを示しています。
Contabilidad frmConta = new Contabilidad();
frmConta.Show();
を
しかし、この場合、メニューオプションはデータベースに保存されているため、データベースには "Contabilidad"という文字列しかありません。ですから、私はC#reflectionを使用してContabilidadのインスタンスを作成するか、文字列形式のクラス名でしか他のフォームを作成しません。
まず私はこの試みた:私はnullを使用している場合、私は(私のフォームは、すべて同じプロジェクトにある)現在のアセンブリを参照するんだけど、私はこれを取得することをStackOverflowの質問に読むので
Form frmConta= (Form)Activator.CreateInstance(null, "Contabilidad").Unwrap();
をメッセージ:
Could not load type 'Contabilidad' from assembly 'AccountingSA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
クラス定義は次です:
namespace AccountingSA {
public partial class Contabilidad : Form
{
public Contabilidad()
{
InitializeComponent();
} ...
はまた、私はこれを試してみました:
Assembly assembly = Assembly.Load("AccountingSA");
Type t = assembly.GetType("Contabilidad");
Form frmConta = (Form)Activator.CreateInstance(t);
しかし、私はこのメッセージに例外ArgumentNullExceptionを得る:T変数がnullであるため
Value cannot be null. Parameter name: type
。
私は間違っていますか?前もって感謝します。