1

Spread.NET のカスタム セル タイプを作成しようとしています。私が得るエラーは

抽象基本メンバーを呼び出せません: 'FarPoint.Web.Spread.BaseCellType.PaintCell(string, 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;
        }
    }
}
4

5 に答える 5

1

抽象メソッドには実装が付属していません。サブクラスは実装を提供する必要があります。これはまさにあなたがしていることです。

呼び出しを省略してください。

于 2014-01-20T16:41:34.383 に答える
1

PaintCell宣言されabstractていないため、呼び出しvirtualを行うことはできません。オブジェクトbase.PaintCellを作成して返すのはコード次第です。Control

を作成したくない場合はControl、より派生したクラスから継承し、その派生クラスのメソッドBaseCellTypeをオーバーライドすることができます。PaintCell

于 2014-01-20T16:33:21.107 に答える
1

これは、抽象クラス「FarPoint.Web.Spread.BaseCellType」で、おそらく PaintCell メソッドを抽象として定義し、抽象メソッドの宣言によって新しい仮想メソッドが導入されているが、そのメソッドの実装が提供されていないためです。代わりに、非抽象派生クラス (「BarcodeCellType」) は、そのメソッドをオーバーライドして独自の実装を提供する必要があります。抽象メソッドは実際の実装を提供しないためです。

于 2014-01-20T16:52:58.000 に答える
1

基本メンバーは抽象的です。つまり、実装はありません。への呼び出しを削除するとbase.PaintCell、コードをコンパイルできるようになりますが、作業に必要なコードが得られるかどうかはわかりません。

于 2014-01-20T16:34:37.297 に答える
-1

抽象メソッドを呼び出すことはできません。派生クラスで定義する必要があります。

于 2014-01-20T16:33:40.107 に答える