Come altri hanno già detto, non si dovrebbe avere alcuna logica complicata nel costruttore del controllo utente.
In teoria, il posto giusto per fare qualsiasi Inizializzazioni complicate dovrebbe essere il gestore di eventi Load o OnLoad(). Tuttavia, in VS2010, l'utilizzo dell'evento Load del controllo (o OnLoad()) non è sufficiente.
Se UserControl risiede nello stesso assieme del modulo che lo sta utilizzando e si desidera visualizzare il modulo in Designer, VS2010 non esegue solo il costruttore di UserControl, ma anche il suo OnLoad() o Carica evento. Questo non sembra accadere sempre, ma quando il Designer ha bisogno di ricostruire il modulo.
Quindi, se avete qualsiasi logica complicata lì o utilizzare risorse esterne, come un database, può gettare questo errore quando si apre la finestra di progettazione per la forma che racchiude. Questo è male perché usare l'evento Load dovrebbe essere il posto giusto per farlo.
Potrebbe essere necessario utilizzare l'inizializzazione pigra per qualsiasi risorsa vitale che si deve inizializzare prima di eseguire il modulo.
Es .:
public class MyUserControl: UserControl
{
...
private List<MyObject> myObjects = null;
private List<MyObject> MyObjects
{
get
{
if (myObjects == null)
{
// lazy initialisation here
using (var dbContext = new MyVerySpecialDatabaseContext())
{
myObjects = dbContext.MyObjects.ToList();
}
}
return myObjects;
}
}
public MyUserControl()
{
InitializeComponent();
this.Load += new System.EventHandler(this.MyUserControl_Load);
... // more UI initialization, but no complicated logic here
}
private void MyUserControl_Load(object sender, EventArgs e)
{
this.myDataBindingSource.DataSource = MyObjects;
}
}
fonte
2014-07-07 23:45:27
Mostraci il codice e indica la linea in cui appare il messaggio di errore. –
Copia tutto l'errore di testo dal desiner e incollalo qui;) – serhio