MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
独自のサブエディタを作成する(ISubEditorインタフェースの実装)

[F4]キー押下、編集中セルでのダブルクリック、またはドロップダウンボタン(DropDownButtonプロパティがTrue)押下によって表示可能なサブエディタを独自に作成することができます。大まかな作成手順は以下のとおりです。

以下のサンプルではサブエディタ(Form2)上にテキストボックスを配置した例を紹介しています。

【実行例】

カスタムサブエディタ

  • Implementsステートメントの利用(インタフェースの実装)は.NETアプリケーション開発における一般的な手法です。利用方法の詳細についてはMSDNライブラリをご参照ください。(インタフェースの実装方法については弊社サポートサービス対象外となります)
  • 本サンプルは基本的な実装例です。実際にはプロジェクトの仕様に基づいた各カスタマイズが必要となります。
  • セル ⇔ サブエディタ間では単一値の引数(value)のみ利用可能です。(多次元配列は利用できません)

 private void Form1_Load(object sender, System.EventArgs e)
 {

   //テキスト型セルを定義しForm2をサブエディタとします
   FarPoint.Win.Spread.CellType.TextCellType t = new FarPoint.Win.Spread.CellType.TextCellType();
   t.SubEditor = new Form2();
   t.DropDownButton = true;
   fpSpread1.ActiveSheet.Cells[0,0].CellType = t;

   fpSpread1.ActiveSheet.SetText(0, 0, "aaa");

 }
 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

   'テキスト型セルを定義しForm2をサブエディタとします
   Dim t As New FarPoint.Win.Spread.CellType.TextCellType
   t.SubEditor = New Form2
   t.DropDownButton = True
   FpSpread1.ActiveSheet.Cells(0, 0).CellType = t

   FpSpread1.ActiveSheet.SetText(0, 0, "aaa")

 End Sub

Form2へのISubEditorインタフェース実装

 public partial class Form2 : System.Windows.Forms.Form, FarPoint.Win.Spread.CellType.ISubEditor
 {

   public event System.EventHandler CloseUp;
   public event System.EventHandler ValueChanged;

   public Form2()
   {

      InitializeComponent();
      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing);

   }

   public Point GetLocation(Rectangle rect)
   {

      //フォームの表示位置を指定します
      return new Point(rect.X + 10, rect.Y + 20);

   }

   public Control GetSubEditorControl()
   {

      // このフォームを返します
      return this;

   }

   public Size GetPreferredSize()
   {

      //フォームのサイズを設定します
      return this.Size;
   }

   public object GetValue()
   {

      //テキストボックスの値を返します
      return textBox1.Text;

   }

   public void SetValue(object value)
   {

      //テキストボックスの値を設定します
      textBox1.Text = value.ToString();

   }

   private void Form2_FormClosing(object sender, FormClosingEventArgs e)
   {

      //フォーム終了時にイベントを発生させます
      if (ValueChanged != null)
         ValueChanged(this, EventArgs.Empty);
      if (CloseUp != null)
         CloseUp(this, EventArgs.Empty);

   }

 }
 Public Class Form2

  Inherits System.Windows.Forms.Form
  Implements FarPoint.Win.Spread.CellType.ISubEditor

  Public Event CloseUp(ByVal sender As Object, ByVal e As System.EventArgs) Implements FarPoint.Win.Spread.CellType.ISubEditor.CloseUp
  Public Event ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Implements FarPoint.Win.Spread.CellType.ISubEditor.ValueChanged

  Public Function GetLocation(ByVal rect As System.Drawing.Rectangle) As System.Drawing.Point Implements FarPoint.Win.Spread.CellType.ISubEditor.GetLocation

    'フォームの表示位置を指定します
    Return New Point(rect.X + 10, rect.Y + 20)

  End Function

  Public Shadows Function GetPreferredSize() As System.Drawing.Size Implements FarPoint.Win.Spread.CellType.ISubEditor.GetPreferredSize

    'フォームのサイズを設定します
    Return Me.Size

  End Function

  Public Function GetSubEditorControl() As System.Windows.Forms.Control Implements FarPoint.Win.Spread.CellType.ISubEditor.GetSubEditorControl

    'このフォームを返します。
    Return Me

  End Function

  Public Function GetValue() As Object Implements FarPoint.Win.Spread.CellType.ISubEditor.GetValue

    'テキストボックスの値を返します
    Return TextBox1.Text

  End Function

  Public Sub SetValue(ByVal value As Object) Implements FarPoint.Win.Spread.CellType.ISubEditor.SetValue

    'テキストボックスの値を設定します
    TextBox1.Text = value

  End Sub

  Private Sub Form2_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing

    'フォーム終了時にイベントを発生させます
    RaiseEvent ValueChanged(Me, EventArgs.Empty)
    RaiseEvent CloseUp(Me, EventArgs.Empty)

  End Sub

 End Class

 

 


© MESCIUS inc. All rights reserved.