Quiero tener un resumen UserControl
, BaseControl
, que implementa una interfaz IBaseControl
. Sin embargo, el establecimiento de la clase de abstraer diseñador rompe VisualStudio (Esto es un problema conocido con Visual Studio (por ejemplo, véase this StackOverflow posting para más información), y por lo que yo sé, no hay no change expected in the near futureVisualStudio 2010 Designer lanza en el método virtual implementado
lo tanto, para evitar esto, . hago BaseControl
no es abstracto, y su puesta en práctica de IBaseControl
métodos virtuales sin embargo, puesto que estos métodos no tienen sentido para un BaseControl
(por ejemplo, no todos los componentes se han añadido aún), hago que tiran:
public class BaseControl : UserControl, IBaseControl
{
/// <summary>
/// This IBaseControl method is not abstract because
/// that breaks the Designer
/// </summary>
public virtual void LoadSettings()
{
throw new NotImplementedException("Implement in derived class.");
}
private void BaseControl_Load(object sender, EventArgs e)
{
// intention: derived methods automagically load their settings
this.LoadSettings();
}
}
En el control derivado, tengo la anulación correspondiente:
public partial class DerivedControl : BaseControl
{
public override void LoadSettings()
{
// load settings
}
}
A pesar de esto, cuando intento abrir el control en el diseñador, aparece un error que indica que BaseControl.LoadSettings
ha lanzado una excepción.
Ahora, recuerde que LoadSettings
se llama en la clase base, por lo que cuando el Diseñador carga el DerivedControl
, a su vez llama al método de carga para el BaseControl
, que arroja.
¿Ha encontrado un problema similar? ¿Cómo has lidiado con esto? Me gustaría tener una solución elegante, si es posible.
Sin repro, no esperaba uno. Ahora tiene dos controles en la barra de herramientas, no elija el incorrecto. Realmente debería anular OnLoad en lugar de usar el evento Load. –