MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
選択したシェイプにコンテキストメニューを表示させる

シェイプオブジェクトに対して直接的にコンテキストメニューを設定する機能はありませんが、コントロールのContextMenuプロパティ(System.Windows.Forms.Controlから継承)を利用することで独自に設定することも可能です。以下のサンプルでは、シェイプオブジェクトの MouseDownイベントを実装し、マウス右クリック時にコンテキストメニューを設定しています。

【実行例】

コンテキストメニュー表示

  • ContextMenu機能の詳細やイベントハンドラの設定方法についてはMSDNライブラリをご参照ください。
  • シェイプオブジェクト選択解除の際に発生するイベントは有りませんので、本サンプルではCellClickイベントにてコンテキストメニューのクリアを行っています。
  • 全てのシェイプオブジェクトクラスはFarPoint.Win.Spread.DrawingSpace.PSShapeクラスから継承しています。
  • シート上に複数のシェイプオブジェクトが存在する場合でも、選択可能なオブジェクトは常に一つだけとなります。(複数同時選択不可)
  • シェイプオブジェクトを処理する各関数(AddShapeメソッド:追加、GetShapeメソッド:取得、ClearShapesメソッド:全消去、RemoveShapeメソッド:削除)は SheetViewクラスメンバのみサポートしていますので、実装時には当クラスメンバを利用してください。 FarPoint.Win.Spread.DrawingSpace.SpreadShapesContainerクラス(内部使用クラス)からも同等の機能が提供されていますが、当クラスメンバであるこれらの各メソッドは内部使用を目的としているため、動作についてはサポートしていません。

 ContextMenu cm = new ContextMenu();
 FarPoint.Win.Spread.DrawingSpace.EllipseShape el = new FarPoint.Win.Spread.DrawingSpace.EllipseShape();

 public Form1()
 {
   // 〜記述略〜
   el.MouseDown += new MouseEventHandler(el_MouseDown);
 }

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

   //コンテキストメニューを作成します
   cm.MenuItems.Add("ロック", new System.EventHandler(this.LockMethod));
   cm.MenuItems.Add("背景色を赤", new System.EventHandler(this.ColorMethod));

   //Ellipseシェイプを追加します
   el.Name = "Ellipse-01";
   el.BackColor = Color.LightYellow;
   el.SetBounds(10, 30, 120, 120);

   fpSpread1.ActiveSheet.AddShape(el);

 }

 private void LockMethod(object sender, System.EventArgs e)
 {
   //ロック処理を記述します
 }

 private void ColorMethod(object sender, System.EventArgs e)
 {
   //背景色変更処理を記述します
 }

 private void el_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
 {

   if (fpSpread1.ActiveWindowlessObject != null && e.Button == MouseButtons.Right)
   {
      //独自のコンテキストメニューを設定します
      fpSpread1.ContextMenu = cm;
   }
   else
   {
      fpSpread1.ContextMenu = null;
   }

 }

 private void fpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
 {
   //シェイプの選択解除(セルクリック)のタイミングでコンテキストメニューをクリアします
   fpSpread1.ContextMenu = null;
 } 
 Dim cm As New ContextMenu
 Dim WithEvents El As New FarPoint.Win.Spread.DrawingSpace.EllipseShape

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

   'コンテキストメニューを作成します
   cm.MenuItems.Add("ロック", New System.EventHandler(AddressOf LockMethod))
   cm.MenuItems.Add("背景色を赤", New System.EventHandler(AddressOf ColorMethod))

   'Ellipseシェイプを追加します
   El.Name = "Ellipse-01"
   El.BackColor = Color.LightYellow
   El.SetBounds(10, 30, 120, 120)

   FpSpread1.ActiveSheet.AddShape(El)

 End Sub

 Private Sub LockMethod(ByVal sender As Object, ByVal e As System.EventArgs)
   'ロック処理を記述します
 End Sub

 Private Sub ColorMethod(ByVal sender As Object, ByVal e As System.EventArgs)
   '背景色変更処理を記述します
 End Sub

 Private Sub El_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles El.MouseDown
   If Not (FpSpread1.ActiveWindowlessObject Is Nothing) And e.Button = MouseButtons.Right Then
      '独自のコンテキストメニューを設定します
      FpSpread1.ContextMenu = cm
   Else
      FpSpread1.ContextMenu = Nothing
   End If
 End Sub

 Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellClick
   'シェイプの選択解除(セルクリック)のタイミングでコンテキストメニューをクリアします
   FpSpread1.ContextMenu = Nothing
 End Sub 

 

 


© MESCIUS inc. All rights reserved.