using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Lima.TestContainer { public partial class TestContainer : Form { public TestContainer() { InitializeComponent(); var assembly = System.Reflection.Assembly.LoadFile( System.IO.Directory.GetCurrentDirectory() + "\\Lima.dll"); foreach (Type type in assembly.GetTypes()) { if (typeof(UserControl).IsAssignableFrom(type) || typeof(System.Windows.Forms.Form).IsAssignableFrom(type)) { controlSelector.Items.Add(type); } } } private void controlSelector_SelectionChanged(object sender, EventArgs e) { UserControl control; try { testPanel.Controls.Clear(); Type type = (Type)controlSelector.SelectedItem; if (typeof(UserControl).IsAssignableFrom(type)) { control = System.Activator.CreateInstance(type) as UserControl; control.Dock = DockStyle.Fill; testPanel.Controls.Add(control as Control); } else { var form = System.Activator.CreateInstance(type) as System.Windows.Forms.Form; // Just to give it some debug info to play with if (type == typeof(Lima.ExceptionDialog)) { var excDialog = form as Lima.ExceptionDialog; var inner1 = new Exception("Inner exception"); var inner2 = new Exception("Middle exception", inner1); var exc = new Exception("Outer exception", inner2); try { throw exc; } catch (Exception fakeException) { excDialog.Exception = fakeException; } } form.ShowDialog(); } } catch (System.Exception exc) { if (exc.InnerException != null) { while (exc.InnerException != null) { exc = exc.InnerException; } System.Windows.Forms.MessageBox.Show( exc.Message + "\n" + exc.StackTrace, "Error constructing control"); } else { System.Windows.Forms.MessageBox.Show( exc.Message + "\n" + exc.StackTrace, "Error constructing control"); } } } } }