我正在尝试为Spread.NET创建自定义单元格类型。我得到的错误是
无法调用抽象基础成员: “FarPoint.Web.Spread.BaseCellType.PaintCell(字符串, System.Web.UI.WebControls.TableCell,FarPoint.Web.Spread.Appearance, FarPoint.Web.Spread.Inset,object,bool)'
这是代码
[Serializable()]
public class BarcodeCellType : FarPoint.Web.Spread.BaseCellType
{
public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
{
parent.Attributes.Add("FpCellType", "BarcodeCellType");
if (value != null)
{
try
{
MemoryStream ms = GenerateBarCode(value.ToString());
var img = Bitmap.FromStream(ms);
value = img;
}
catch (Exception ex)
{
value = ex.ToString();
}
}
return base.PaintCell(id, parent, style, margin, value, upperLevel); //ERROR HERE
}
private MemoryStream GenerateBarCode(string codeInfo)
{
using (MemoryStream ms = new MemoryStream())
{
BarCodeBuilder bb = new BarCodeBuilder();
bb.CodeText = codeInfo;
bb.SymbologyType = Symbology.Code128;
bb.BarCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms;
}
}
}
答案 0 :(得分:1)
PaintCell
被声明为abstract
而不是virtual
,因此您无法进行base.PaintCell
来电。您的代码可以创建Control
对象并将其返回。
如果您不想创建Control
,您可能希望从比BaseCellType
更多的派生类继承并覆盖派生类PaintCell
方法。
答案 1 :(得分:1)
基本成员是抽象的,这意味着没有实现。删除对base.PaintCell
的调用将允许代码编译,但我不确定是否会获得工作所需的代码。
答案 2 :(得分:1)
An abstract method doesn't come with an implementation;子类必须提供一个实现,这正是你正在做的。
只需省略通话。
答案 3 :(得分:1)
这是因为在您的抽象类“FarPoint.Web.Spread.BaseCellType”中,您可能将PaintCell方法定义为抽象,抽象方法声明引入了新的虚方法,但未提供该方法的实现。相反,非抽象派生类(“BarcodeCellType”)需要通过覆盖该方法来提供自己的实现。因为抽象方法没有提供实际的实现。
答案 4 :(得分:-1)
您无法调用抽象方法。它需要在派生类中定义。