| MESCIUS SPREAD for Windows Forms 15.0J サンプルコード集 > セル型 > 独自のセル型を作成する(既存セルクラスの継承) |
既存のセル型を継承したサブクラスを作成する(各メソッドのオーバーライドなど)ことで独自の機能を実装することができます。ここではセルの編集エディタとして標準の「NumericUpDownコントロール」を利用し、PaintCellメソッドのオーバーライドによって非編集セル独自に描画しています。


![]() |
|
private void Form1_Load(object sender, EventArgs e) { // 作成したカスタムクラスを設定 fpSpread1.ActiveSheet.Cells[1, 1].CellType = new MyNumericCellType(); fpSpread1.ActiveSheet.SetColumnWidth(1, 90); fpSpread1.ActiveSheet.SetRowHeight(1, 20); // テストデータの設定 fpSpread1.ActiveSheet.Cells[1, 1].Value = "123"; }
Private Sub CellType_11_Load(sender As Object, e As EventArgs) Handles MyBase.Load '作成したカスタムクラスを設定 FpSpread1.ActiveSheet.Cells(1, 1).CellType = New MyNumericCellType FpSpread1.ActiveSheet.SetColumnWidth(1, 90) FpSpread1.ActiveSheet.SetRowHeight(1, 20) ' テストデータの設定 FpSpread1.ActiveSheet.Cells(1, 1).Value = "123" End Sub
[Serializable()] class MyNumericCellType : FarPoint.Win.Spread.CellType.GeneralCellType //標準型セルを継承します { //(System.Windows.Forms)NumericUpDownコントロールのインスタンスを生成します NumericUpDown nud = new NumericUpDown(); public MyNumericCellType() : base() { //NumericUpDownのプロパティを設定します nud.Maximum = 199; nud.Minimum = 1; } public MyNumericCellType(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { //NumericUpDownのプロパティを設定します nud.Maximum = 199; nud.Minimum = 1; } public override string Format(object o) { //ここでは継承元(標準型セル)のFormatメソッドをオーバーライドします return base.Format(o.ToString()); } public override Control GetEditorControl(FarPoint.Win.Spread.Appearance appearance, float zoomFactor) { //編集中セルのエディタコントロールとしてNumericUpDownを返します return nud; } public override object GetEditorValue() { //エディタコントロールであるNumericUpDownのテキスト値を返します return nud.Text; } public override Size GetPreferredSize(Graphics g, Size size, FarPoint.Win.Spread.Appearance appr, object value, float zoom) { //ここでは継承元(標準型セル)のGetPreferredSizeメソッドをオーバーライドします return base.GetPreferredSize(g, size, appr, value, zoom); } public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appr, object value, bool issel, bool islocked, float zoom) { Brush backColorBrush = new System.Drawing.Drawing2D.LinearGradientBrush(r, SystemColors.ControlLightLight, SystemColors.ControlDark, System.Drawing.Drawing2D.LinearGradientMode.Horizontal); Brush foreColorBrush = new SolidBrush(Color.RoyalBlue); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; g.FillRectangle(backColorBrush, r); if (value is string) { //独自の文字列描画を行います(グラデーション表示) g.DrawString((string)value, new Font("Times New Roman", 12), foreColorBrush, new RectangleF(r.X, r.Y, r.Width, r.Height),sf); } backColorBrush.Dispose(); foreColorBrush.Dispose(); } public override object Parse(string s) { //ここでは継承元(標準型セル)のParseメソッドをオーバーライドします return base.Parse(s); } public override void SetEditorValue(object value) { //セルの編集中に利用されるNumericUpDownに値を設定します nud.Text = (string)value; } }
<Serializable()> Public Class MyNumericCellType '標準型セルを継承します Inherits FarPoint.Win.Spread.CellType.GeneralCellType '(System.Windows.Forms)NumericUpDownコントロールのインスタンスを生成します Private nud As New NumericUpDown Public Sub New() MyBase.New() 'NumericUpDownのプロパティを設定します nud.Maximum = 199 nud.Minimum = 1 End Sub Public Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) MyBase.New(info, context) 'NumericUpDownのプロパティを設定します nud.Maximum = 199 nud.Minimum = 1 End Sub Public Overrides Function Format(ByVal obj As Object) As String 'ここでは継承元(標準型セル)のFormatメソッドをオーバーライドします Return MyBase.Format(obj) End Function Public Overrides Function GetEditorControl(ByVal appearance As FarPoint.Win.Spread.Appearance, ByVal zoomFactor As Single) As System.Windows.Forms.Control '編集中セルのエディタコントロールとしてNumericUpDownを返します Return nud End Function Public Overrides Function GetEditorValue() As Object 'エディタコントロールであるNumericUpDownのテキスト値を返します Return nud.Text End Function Public Overloads Overrides Function GetPreferredSize(ByVal g As System.Drawing.Graphics, ByVal size As System.Drawing.Size, ByVal appearance As FarPoint.Win.Spread.Appearance, ByVal value As Object, ByVal zoomFactor As Single) As System.Drawing.Size 'ここでは継承元(標準型セル)のGetPreferredSizeメソッドをオーバーライドします Return MyBase.GetPreferredSize(g, size, appearance, value, zoomFactor) End Function Public Overrides Sub PaintCell(ByVal g As System.Drawing.Graphics, ByVal r As System.Drawing.Rectangle, ByVal appearance As FarPoint.Win.Spread.Appearance, ByVal value As Object, ByVal isSelected As Boolean, ByVal isLocked As Boolean, ByVal zoomFactor As Single) Dim backColorBrush As Brush = New System.Drawing.Drawing2D.LinearGradientBrush(r, SystemColors.ControlLightLight, SystemColors.ControlDark, System.Drawing.Drawing2D.LinearGradientMode.Horizontal) Dim foreColorBrush As Brush = New SolidBrush(Color.Red) Dim sf As New StringFormat sf.Alignment = StringAlignment.Center sf.LineAlignment = StringAlignment.Center g.FillRectangle(backColorBrush, r) If TypeOf value Is String Then '独自の文字列描画を行います(グラデーション表示) g.DrawString(CStr(value), New Font("Times New Roman", 12), foreColorBrush, New RectangleF(r.X, r.Y, r.Width, r.Height), sf) End If backColorBrush.Dispose() foreColorBrush.Dispose() End Sub Public Overrides Function Parse(ByVal s As String) As Object 'ここでは継承元(標準型セル)のParseメソッドをオーバーライドします Return MyBase.Parse(s) End Function Public Overrides Sub SetEditorValue(ByVal value As Object) 'セルの編集中に利用されるNumericUpDownに値を設定します nud.Text = value End Sub End Class