I have a base class, defined as below (I’m also using DevExpress components):
public abstract partial class BaseFormClass<R> : XtraForm where R : DataRow
{
...
}
Contrary to what I’ve read from elsewhere, I’m still able to design this class. I didn’t have to create a concrete class from it to do so. But, when I create a concrete class descended from it (as below), that class won’t work in the designer.
public partial class ConcreteFormClass : BaseFormClass<StronglyTypedRow>
{
...
}
I get this message:
The designer could not be shown for
this file because none of the classes
within it can be designed. The
designer inspected the following
classes in the file:
ConcreteFormClass — The base
class
‘BaseFormClass’
could not be loaded. Ensure the
assembly has been referenced and that
all projects have been built.
Has anyone seen this before? Any sort of known workaround?
Sorry, but this just isn’t going to work (which is a shame — I’ve wished in the past that you could do this, too.) The problem is the basic methodology of the designer.
To present you with a model of your form, it doesn’t actually try to construct the form itself; if it did that, you’d run into other problems — what if your form doesn’t have a parameterless constructor? Instead, it actually instantiates an instance of the base class of your form. Then it sweeps through your
InitializeComponents()method and “layers on” all the controls that you’ve defined there onto the base form.So it’s obvious why this won’t work. You can design an instance of
BaseFormClass, because to design that, it creates an instance ofXtraForm, which is concrete. But you can’t design an instance ofConcreteFormClass, because to do so, it would need to create an instance ofBaseFormClass, which is abstract.The easiest workaround for this is to just make
BaseFormClassnon-abstract. (If you want to make absolutely sure nobody can create one, perhaps you could make the default constructor private? I’m not sure if the designer can handle that, but I don’t see why it couldn’t.) Sucks, but such is life. Complain to Microsoft and maybe it’ll be better in Visual Studio 2012.