2013-06-27 11 views
5

Ho problemi nell'apertura di un modulo ereditato in un'applicazione Windows CE. Questo è un progetto che sto prendendo in consegna da un ex-dipendente, ma ci sono versioni compilate in esecuzione su alcuni dispositivi mobili quindi suppongo che dovrebbe essere in grado di aprire. Ho la versione VS corretta (2008) e ho provato a pulire la soluzione e ricostruire la soluzione. Quando si distribuisce la soluzione funziona come un fascino. Non appena cerco di andare nel design delle forme ereditarie, ottengo il seguente errore:Errore durante l'apertura del designer in forma ereditata

To prevent possible data loss before loading the designer, the following errors must be resolved: 

Object reference not set to an instance of an object. 

dello stack:

at MyApp.frmBase.UpdateOnline() in C:\Users\Corne\Documents\Visual Studio 2008\Projects\Test\MyApp\MyApp\frmBase.cs:line 35 
at MyApp.frmBase.frmBase_Load(Object sender, EventArgs e) in C:\Users\Corne\Documents\Visual Studio 2008\Projects\Test\MyApp\MyApp\frmBase.cs:line 30 
at System.Windows.Forms.Form.OnLoad(EventArgs e) 
at System.Windows.Forms.Form.OnCreateControl() 
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
at System.Windows.Forms.Control.CreateControl() 
at System.Windows.Forms.Control.SetVisibleCore(Boolean value) 
at System.Windows.Forms.Form.SetVisibleCore(Boolean value) 
at System.Windows.Forms.Control.set_Visible(Boolean value) 
at System.Windows.Forms.Design.DesignerFrame.Initialize(Control view) 
at System.Windows.Forms.Design.DocumentDesigner.Initialize(IComponent component) 
at System.Windows.Forms.Design.FormDocumentDesigner.Initialize(IComponent component) 
at System.ComponentModel.Design.DesignerHost.AddToContainerPostProcess(IComponent component, String name, IContainer containerToAddTo) 
at System.ComponentModel.Design.DesignerHost.Add(IComponent component, String name) 
at System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent(Type componentType, String name) 
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer) 
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer) 
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration) 
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) 
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) 
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload) 

risposta

8

Si può chiaramente vedere dalla traccia dello stack che il modulo di base di Carica il gestore di eventi è in esecuzione e genera un'eccezione. Questo è normale, gli eventi nel modulo di base come Load e Paint vengono eseguiti anche in fase di progettazione. Fornisce la vista del designer WYSIWYG. Questo però va male se quel codice può funzionare correttamente solo in fase di esecuzione.

La proprietà Control.DesignMode ha lo scopo di fornire un modo per verificare se il codice nella classe sta funzionando in fase di progettazione. Sfortunatamente non è disponibile in CF, quindi è necessario un approccio diverso. L'incantesimo magico appare così:

private void frmBase_Load(object sender, EventArgs e) { 
     if (this.Site == null || !this.Site.DesignMode) { 
      // Not in design mode, okay to do dangerous stuff... 
      this.UpdateOnline(); 
     } 
    } 
+1

SUPER GRANDE LAVORO MOLTO BENE, COME UN FASCINO! –

Problemi correlati