title: The designer must create an instance of...cannot because the type is declared abstract
body: <p>Visual Studio complains: <strong>Warning  1   The designer must create an instance of type 'RentalEase.CustomBindingNavForm' but it cannot because the type is declared as abstract.</strong>    </p>
  
  <p>Visual Studio won't let me access the Designer for the form. The class already implements all abstract methods from the CustomBindingNavForm. CustomBindingNavForm provides some functions concrete and abstract.</p>
  
  <p>Is there a way around this? </p>
  
  <p>Here is the class:</p>
  
  <pre><code> public abstract class CustomBindingNavForm : SingleInstanceForm {     
  
          //Flags for managing BindingSource
          protected bool isNew = false;
          protected bool isUpdating = false;
  
          /// &lt;summary&gt;
          /// This is so that when a new item is added, it sets isNew and firstPass to true. The Position Changed Event will look for
          /// firstPass and if it is true set it to false. Then on the next pass, it will see it's false and set isNew to false.
          /// This is needed because the Position Changed Event will fire when a new item is added.
          /// &lt;/summary&gt;
          protected bool firstPass = false;
  
  
          protected abstract bool validateInput();
          protected abstract void saveToDatabase();
  
  
          //manipulating binding
          protected abstract void bindingSourceCancelResetCurrent();
          protected abstract void bindingSourceRemoveCurrent();
          protected abstract void bindingSourceMoveFirst();
          protected abstract void bindingSourceMoveNext();
          protected abstract void bindingSourceMoveLast();
          protected abstract void bindingSourceMovePrevious();
          protected abstract void bindingSourceAddNew();
  
          public void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e) {
              if (validateInput()) {
                  bindingSourceMovePrevious();
              } else {
                  DialogResult cont = MessageBox.Show(null, "There are errors in your data. Click Cancel to go back and fix them, or ok to continue. If you continue, changes will not be saved.", "Continue?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                  if (cont == DialogResult.OK) {
                      if (isNew) {
                          bindingSourceRemoveCurrent();
                          isNew = false;
                      } else {
                          bindingSourceCancelResetCurrent();
                          bindingSourceMovePrevious();
                      }
                  }
              }
          }
  
          public void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) {
              if (validateInput()) {
                  saveToDatabase();
                  bool temp = isUpdating;
                  isUpdating = true;
                  bindingSourceAddNew();
                  isUpdating = temp;
  
                  isNew = true;
                  firstPass = true;
              } else {
                  DialogResult cont = MessageBox.Show(null, "There are errors in your data. Click Cancel to go back and fix them, or ok to continue. If you continue, changes will not be saved.", "Continue?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                  if (cont == DialogResult.OK) {
  
                      if (isNew) {
                          bindingSourceRemoveCurrent();
                          isNew = false;
                      } else {
                          bindingSourceCancelResetCurrent();
                      }
  
                      bool temp = isUpdating;
                      isUpdating = true;
                      bindingSourceAddNew();
                      isUpdating = temp;
  
                      isNew = true;
                      firstPass = true;
                  }
              }
          }
  
          public void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e) {
              if (validateInput()) {
                  bindingSourceMoveFirst();
              } else {
                  DialogResult cont = MessageBox.Show(null, "There are errors in your data. Click Cancel to go back and fix them, or ok to continue. If you continue, changes will not be saved.", "Continue?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                  if (cont == DialogResult.OK) {
                      if (isNew) {
                          bindingSourceRemoveCurrent();
                          isNew = false;
                      } else {
                          bindingSourceCancelResetCurrent();
                      }
                      bindingSourceMoveFirst();
                  }
              }
          }
  
          public void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e) {
              if (validateInput()) {
                  bindingSourceMoveNext();
              } else {
                  DialogResult cont = MessageBox.Show(null, "There are errors in your data. Click Cancel to go back and fix them, or ok to continue. If you continue, changes will not be saved.", "Continue?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                  if (cont == DialogResult.OK) {
                      if (isNew) {
                          bindingSourceRemoveCurrent();
                          isNew = false;
                      } else {
                          bindingSourceCancelResetCurrent();
                      }
                      bindingSourceMoveNext();
                  }
              }
          }
      }
  </code></pre>