MESCIUS SPREAD for Windows Forms 17.0J
独自のセル型の作成

既存のセル型を表すクラスを継承するサブクラスを作成することで、独自のセル型を作成できます。継承元のクラスの各メソッドをオーバーライドし、独自お処理を実装します。カスタムセル型クラスに対してクリップボードを使用する場合、およびExcelへのエクスポートメソッドを使用する場合は、カスタムセル型クラスをシリアル化可能にマークする必要があります。

各セル型が提供する他の機能については、「セル型の拡張設定」を参照してください。

コードの使用

次のサンプルコードは、チェックボックス型セルのサブクラスを作成し、各メソッドの用法を示します。

C#
コードのコピー

public class myCkBox : FarPoint.Win.Spread.CellType.CheckBoxCellType
{
    CheckBox ckbx = new CheckBox();

    public myCkBox()
    {
    }
    new event EventHandler EditingCanceled;
    new event EventHandler EditingStopped;

    public override void StartEditing(EventArgs e, bool selectAll, bool autoClipboard)
    {
        return;
    }
    public override void CancelEditing()
    {
        EditingCanceled(ckbx, EventArgs.Empty);
        base.FireEditingCanceled();
    }
    public override bool StopEditing()
    {
        if (EditingStopped != null)
        {
            EditingStopped(ckbx, EventArgs.Empty);
            base.FireEditingStopped();
            return true;
        }
        else
        {
            return false;
        }
    }

    public override bool IsReservedKey(KeyEventArgs e)
    {
        return base.IsReservedKey(e);
    }
    public override object IsReservedLocation(Graphics g, int x, int y, Rectangle r, FarPoint.Win.Spread.Appearance appr, object
    value, float zoom)
    {
        return base.IsReservedLocation(g, x, y, r, appr, value, zoom);
    }
    public override Size GetPreferredSize(Graphics g, Size size, FarPoint.Win.Spread.Appearance appr, object value, float zoom)
    {
        return base.GetPreferredSize(g, size, appr, value, zoom);
    }
    public override object Parse(string s)
    {
        return base.Parse(s);
    }
    public override string Format(object o)
    {
        return base.Format(o.ToString());
    }
    public override Control GetEditorControl(FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
    {
        return ckbx;
    }
    public override object GetEditorValue()
    {
        return ckbx.CheckState;
    }
    public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appr, object value, bool issel, bool
    islocked, float zoom)
    {
        GetEditorValue();
        if (ckbx.CheckState == CheckState.Checked)
        {
            ControlPaint.DrawCheckBox(g, r.X, r.Y, r.Width - 40, r.Height - 6, ButtonState.Checked);
        }
        else if (ckbx.CheckState == CheckState.Unchecked)
        {
            ControlPaint.DrawCheckBox(g, r.X, r.Y, r.Width - 40, r.Height - 6, ButtonState.Normal);
        }
    }
    public override void SetEditorValue(object value)
    {
        ckbx.CheckState = CheckState.Checked;
    }
    public override Cursor GetReservedCursor(object o)
    {
        return base.GetReservedCursor(o);
    }
}

// カスタムセル型クラスをセルに設定します
private void button1_Click(object sender, System.EventArgs e)
{
    myCkBox ckbx = new myCkBox();
    fpSpread1.ActiveSheet.Cells[0, 0].CellType = ckbx;
}

Visual Basic
コードのコピー

Public Class myCkBox
    Inherits FarPoint.Win.Spread.CellType.CheckBoxCellType

    Dim ckbx As New CheckBox()

    Sub New()

    End Sub

    Public Shadows Event EditingStopped(ByVal sender As Object, ByVal e As EventArgs)

    Public Shadows Event EditingCancelled(ByVal sender As Object, ByVal e As EventArgs)

    Public Overrides Sub StartEditing(ByVal e As EventArgs, ByVal selectAll As Boolean, ByVal autoClipboard As Boolean)
        MyBase.StartEditing(e, selectAll, autoClipboard)
    End Sub

    Public Overrides Sub CancelEditing()
        RaiseEvent EditingCancelled(ckbx, EventArgs.Empty)
        MyBase.FireEditingCanceled()
    End Sub

    Public Overrides Function StopEditing() As Boolean
        RaiseEvent EditingStopped(ckbx, EventArgs.Empty)
        MyBase.FireEditingStopped()
        Return True
    End Function

    Public Overrides Function IsReservedKey(ByVal e As KeyEventArgs) As Boolean
        Return MyBase.IsReservedKey(e)
    End Function

    Public Overrides Function IsReservedLocation(ByVal g As Graphics, ByVal x As Integer, ByVal y As Integer, ByVal r As Rectangle,
 ByVal appr As FarPoint.Win.Spread.Appearance, ByVal value As Object, ByVal zoom As Single) As Object
        Return MyBase.IsReservedLocation(g, x, y, r, appr, value, zoom)
    End Function

    Public Overrides Function GetPreferredSize(ByVal g As Graphics, ByVal s As Size, ByVal appr As FarPoint.Win.Spread.Appearance,
 ByVal value As Object, ByVal zoom As Single) As Size
        Return MyBase.GetPreferredSize(g, s, appr, value, zoom)
    End Function

    Public Overrides Function Parse(ByVal s As String) As Object
        Return MyBase.Parse(s)
    End Function

    Public Overrides Function Format(ByVal o As Object) As String
        Return MyBase.Format(o)
    End Function

    Public Overrides Function GetEditorControl(ByVal appr As FarPoint.Win.Spread.Appearance, ByVal zoom As Single) As Control
        Return ckbx
    End Function

    Public Overrides Function GetEditorValue() As Object
        Return ckbx.CheckState
    End Function

    Public Overrides Sub PaintCell(ByVal g As Graphics, ByVal r As Rectangle, ByVal appr As FarPoint.Win.Spread.Appearance, ByVal Value As Object, ByVal issel As Boolean, ByVal islocked As Boolean, ByVal zoom As Single)
        GetEditorValue()
        If ckbx.CheckState = CheckState.Checked Then
            ControlPaint.DrawCheckBox(g, r.X, r.Y, r.Width - 40, r.Height - 6, ButtonState.Checked)
        ElseIf ckbx.CheckState = CheckState.Unchecked Then
            ControlPaint.DrawCheckBox(g, r.X, r.Y, r.Width - 40, r.Height - 6, ButtonState.Normal)
        End If
    End Sub

    Public Overrides Sub SetEditorValue(ByVal value As Object)
        ckbx.CheckState = CheckState.Checked
    End Sub

    Public Overrides Function GetReservedCursor(ByVal o As Object) As Cursor
        Return MyBase.GetReservedCursor(o)
    End Function
End Class

' カスタムセル型クラスをセルに設定します
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ckbx As New myCkBox()
    FpSpread1.ActiveSheet.Cells(0, 0).CellType = ckbx
End Sub

 

 


© MESCIUS inc. All rights reserved.