[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