// // private void CreateDesigner(EtoDesignerLoader loader) { // Our loader will handle loading the file (or creating a blank one). host = new EtoDesignerHost(hostingServiceContainer); // The limited events tab functionality we have requires a special kind of // property grid site. // propertyGrid.Site = new PropertyGridSite(host as IServiceProvider, this); propertyGrid.PropertyTabs.AddTabType(typeof(EventsTab)); host.LoadDocument(loader); this.loader = loader; // The toolbox needs access to the IToolboxService and the designers. toolbox.Host = host; // Initialize our document window. host.View.Dock = DockStyle.Fill; host.View.Visible = true; panelMain.Controls.Add(host.View); // These are normally unavailable if we've got no host created. // Otherwise we gets lots of null reference exceptions. // tabControl.Visible = true; menuItemSave.Enabled = true; menuItemSaveAs.Enabled = true; menuItemEdit.Enabled = true; menuItemView.Enabled = true; menuItemLayout.Enabled = true; menuItemDebug.Enabled = true; // This IMessageFilter is used to intercept and decipher keyboard presses // that might be instructions for our designer. We have to do it this way // since we can't have our designer raise KeyPress events. // filter = new KeystrokeMessageFilter(host); Application.AddMessageFilter(filter); }
// // // private bool DestroyDesigner() { if (loader != null) { if (loader.PromptDispose()) { // Again, bad things happen if there's no host loaded and // certain buttons are pressed in our TabControl or MainMenu. // tabControl.Visible = false; menuItemSave.Enabled = false; menuItemSaveAs.Enabled = false; menuItemEdit.Enabled = false; menuItemView.Enabled = false; menuItemLayout.Enabled = false; menuItemDebug.Enabled = false; // Get rid of our document window. panelMain.Controls.Clear(); // No need to filter for designer-intended keyboard strokes now. Application.RemoveMessageFilter(filter); filter = null; // Get rid of that property grid site so it doesn't ask for // any more services from our soon-to-be-disposed host. // propertyGrid.Site = null; host.Dispose(); loader = null; host = null; return(true); } return(false); } return(true); }