public void AddElement(string ElementName) { int elementNo = 0; // Assuming you already know the assembly name, or it can be another parameter MyReflectionClass oReflection = new MyReflectionClass(assembly, ElementName); string message = ""; IElement o = oReflection.InstantiateClass(ref message) as IElement if (o != null) { // where ElementMethods is part of your IElement interface o.ElementMethods += new ElementMethodsDelegate(element_ElementMethods); // etc.etc. } }And here's a simplified version of a Reflection class I've used:
public class MyReflectionClass { #region Declarations private string m_AssemblyName; private string m_ClassName; #endregion #region Constructors public MyReflectionClass() { } /// Make sure that you have either included the full path to your Assembly file /// or that you modify this class to include code for obtaining the full path public MyReflectionClass(string assemblyName, string className) { this.AssemblyName = assemblyName; this.ClassName = className; } #endregion #region Methods public Assembly LoadAssembly(ref string Message) { Assembly oAssembly = null; try { oAssembly = Assembly.LoadFrom(this.m_AssemblyName + ".DLL"); } catch (System.IO.FileNotFoundException) { Message = this.m_AssemblyName + " could not be found at the specified URL!" + (char)13 + (char)13 + "Check that you have correctly entered the component URL and that your network or Internet " + "connection is functioning correctly."; return oAssembly; } catch (System.BadImageFormatException) { Message = this.m_AssemblyName + " is invalid or damaged!" + (char)13 + (char)13 + "Contact your system administrator."; return oAssembly; } catch (System.Exception ex) { Message = ex.Message; return oAssembly; } return oAssembly; } public object InstantiateClass(ref string Message) { Assembly oAssembly = null; return this.InstantiateClass(ref oAssembly, ref Message); } public object InstantiateClass(ref Assembly oAssembly, ref string Message) { object oClass = null; if (oAssembly == null || oAssembly.FullName.Contains(this.m_AssemblyName) == false) oAssembly = this.LoadAssembly(ref Message); try { // Create an instance of the desired type from the assembly if (oAssembly != null) oClass = oAssembly.CreateInstance(this.m_ClassName); } catch (Exception ex) { Message = ex.Message; return oClass; } return oClass; } #endregion #region Properties public string AssemblyName { get { return this.m_AssemblyName; } set { this.m_AssemblyName = value.Trim(); if (this.m_AssemblyName.ToUpper().EndsWith(".DLL", true, null)) this.m_AssemblyName = this.m_AssemblyName.Remove(this.m_AssemblyName.Length - 4); } } public string ClassName { get { return this.m_ClassName; } set { this.m_ClassName = value.Trim(); if (this.m_ClassName.Contains(this.m_AssemblyName) == false) this.m_ClassName = this.m_AssemblyName + "." + this.m_ClassName; } } #endregion }Does this help at all?
> public void AddElement(object newElement, Enums.ElementType t) > { > int elementNo = 0; > switch (t) > { > case Enums.ElementType.Bit: > Bit element = new Bit(); > element.Location = this._ConnectionPoint; > element.ElementMethods += new ElementMethodsDelegate(element_ElementMethods); > foreach (Control c in this.Controls) > { > if (c.GetType().Equals(typeof(Bit))) > { > element.Left = c.Right; > elementNo++; > } > } > element.ElementNumber = elementNo; > this.Controls.Add(element); > Elements.Insert(Elements.Count - 1, element); > break; > > } > > this.Controls.Clear(); > int numElement = 0; > int right = 0; > foreach (Control c in Elements) > { > Bit b = (Bit)c; > b.ElementNumber = numElement; > b.Left = right; > this.Controls.Add(b); > numElement++; > right = b.Right; > } > } > >>
>Bit element = new Bit();
>
>>newElement.Name element = new newElement.Name();
>
>