2012-03-26 4 views
0

Я создал два настраиваемых элемента управления. На основе функций любой из них будет выбран и использован в приложении C#. Я загрузил нужный элемент управления, но как я могу использовать там функции. Например, есть функция public Control моего управления LoadXML(). Оба элемента управления содержат эту функцию. Только один элемент управления будет загружен за один раз.Добавление пользовательского контроля динамически в приложение 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"); } если (MyAssembly! = NULL) { Тип т = myassembly.GetType ("PDFView.PDFViewer"); cc = (управление) Activator.CreateInstance (t); this.Controls.Add (cc); cc.Dock = DockStyle.Bottom; cc.Show(); – abdul

+0

Я загружаю из .dll обоих элементов управления. Приложение определит время выполнения, которое будет загружено .dll. – abdul

+0

cc = (Control) Activator.CreateInstance (t); Здесь применяется к вашему конкретному типу управления, а не Control – Habib

0

Если я понял вас вопрос правильно, вы должны создать интерфейс и добавить функции LoadXML(). Внедрите интерфейс в свои пользовательские элементы управления. Теперь вы можете создать объект интерфейса и инициализировать его с помощью требуемого элемента управления.

interface MyInterface 
    { 
     void LoadXML(); 
    } 

В вашем пользовательском элементе управления, реализации MyInterface

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

То же самое для UserControl2 Теперь загрузите нужный пользовательский элемент управления в объекте интерфейса и вызвать LoadXML(),

class Class 
    { 
     MyInterface control; 

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

      control.LoadXML(); 
     } 
    } 

Надеюсь, это поможет ,

Смежные вопросы