2012-03-26 12 views
0

私は2つのカスタムコントロールを作成しました。機能に基づいて、それらのいずれか1つが選択され、C#アプリケーションで使用されます。私は希望のコントロールをロードしましたが、その機能をどのように使用することができますか?たとえば、コントロールLoadXML()の公開関数があります。どちらのコントロールにもこの機能が含まれています。 一度に1つのコントロールのみが読み込まれます。c#アプリケーションでカスタムコントロールを動的に追加する

+0

どのように読み込みますか?彼らはどこにロードされて知っていますか? LoadXML()をいつ呼び出す必要がありますか? –

答えて

0

コントロールのインスタンスを作成し、それをフォームに追加した後、公開された公開メソッドを呼び出すことができます。

TestControl myTestControl = new TestControl(); 
this.Controls.Add(myTestControl); 
myTestControl.LoadXML(); 

あなたはDLLを通じてコン​​トロールをロードする場合は、呼び出すメソッドにこれを試してください:私はあなたが適切に疑問理解している場合は、インターフェイスを作成して追加する必要があり、

// Use the file name to load the assembly into the current 
    // application domain. 
    Assembly a = Assembly.Load("example"); 
    // Get the type to use. 
    Type myType = a.GetType("Example"); 
    // Get the method to call. 
    MethodInfo myMethod = myType.GetMethod("MethodA"); 
    // Create an instance. 
    object obj = Activator.CreateInstance(myType); 
    // Execute the method. 
    myMethod.Invoke(obj, null); 

http://msdn.microsoft.com/en-us/library/25y1ya39.aspx

+0

myassembly = Assembly.LoadFrom(Application.StartupPath + "\\ PDF" + "\\ x86" + "\\ PDFView" + "dll"); } IF(myassembly = NULL!) {型T = myassembly.GetType( "PDFView.PDFViewer")。 cc =(Control)Activator.CreateInstance(t); this.Controls.Add(cc); cc.Dock = DockStyle.Bottom; cc.Show(); – abdul

+0

私は両方のコントロールの.dllからロードしています。アプリケーションは、.dllがロードされる実行時を決定します。 – abdul

+0

cc =(Control)Activator.CreateInstance(t);コントロール – Habib

0

をそれにはLoadXML()機能があります。カスタムコントロールにインターフェイスを実装します。これで、インターフェイスのオブジェクトを作成し、目的のコントロールで初期化することができます。ユーザーコントロールで

interface MyInterface 
    { 
     void LoadXML(); 
    } 

、今うまくいけば、それが役立つインタフェースオブジェクトに必要なユーザーコントロールをロードし、LoadXML()を呼び出し、

class Class 
    { 
     MyInterface control; 

     public Class() 
     { 
      if (condition == true) 
       control = new UserControl1(); 
      else 
       control = new UserControl2(); 

      control.LoadXML(); 
     } 
    } 

UserControl2 のための同じMyInterface

public class UserControl1 : UserControl, MyInterface 
    { 
     public void LoadXML() 
     { 
      ... //do what you want 
     } 
    } 

を実装。

関連する問題