Visual Studio中抱怨:警告1名设计者必须创建类型"RentalEase.CustomBindingNavForm"的一个实例,但它不能因为类型声明为抽象的.
Visual Studio不允许我访问表单的Designer.该类已经实现了CustomBindingNavForm中的所有抽象方法.CustomBindingNavForm提供了一些具体和抽象的函数.
有没有解决的办法?
这是班级:
public abstract class CustomBindingNavForm : SingleInstanceForm { //Flags for managing BindingSource protected bool isNew = false; protected bool isUpdating = false; ////// 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. /// 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(); } } } }
Allen Rice.. 29
我还没有看到城市马铃薯(它的下来)的内容,但是Me和Smelch提出了一个解决方案. Form
它本身继承自一个抽象类,所以他们不告诉你的是它只有第一级继承不能抽象,第二级就可以了.
从那里它只是在中间有一个空类并包裹#if debug
表格声明的问题,你很高兴去.只需确保在发布模式下发布并在调试模式下进行设计(这是非常典型的).
在设计(调试)和构建(发布)时,您将获得完整的设计器支持和真正的抽象基类,因为每次它最终都使用您的抽象基类.
完整的解释和答案就在这里
我还没有看到城市马铃薯(它的下来)的内容,但是Me和Smelch提出了一个解决方案. Form
它本身继承自一个抽象类,所以他们不告诉你的是它只有第一级继承不能抽象,第二级就可以了.
从那里它只是在中间有一个空类并包裹#if debug
表格声明的问题,你很高兴去.只需确保在发布模式下发布并在调试模式下进行设计(这是非常典型的).
在设计(调试)和构建(发布)时,您将获得完整的设计器支持和真正的抽象基类,因为每次它最终都使用您的抽象基类.
完整的解释和答案就在这里