FlexGrid for WinForms
GetMergedRange(Int32,Int32,Boolean) メソッド
使用例 

C1.Win.C1FlexGrid.4.5.2 アセンブリ > C1.Win.C1FlexGrid 名前空間 > C1FlexGrid クラス > GetMergedRange メソッド : GetMergedRange(Int32,Int32,Boolean) メソッド
行インデックス。
列インデックス。
範囲をグリッドの可視領域でクリップするかどうか。
指定されたセルを含むマージされたセル範囲を返します。
シンタックス
'宣言
 
Public Overloads Overridable Function GetMergedRange( _
   ByVal row As System.Integer, _
   ByVal col As System.Integer, _
   ByVal clip As System.Boolean _
) As CellRange
public virtual CellRange GetMergedRange( 
   System.int row,
   System.int col,
   System.bool clip
)

パラメータ

row
行インデックス。
col
列インデックス。
clip
範囲をグリッドの可視領域でクリップするかどうか。

戻り値の型

指定されたセルを含む CellRangeオブジェクト。
解説

セルのマージは、 AllowMergingプロパティによって制御されます。 GetMergedRange(Int32,Int32,Boolean)メソッドを使用して、セルを隣接するセルとマージするかどうかを決定できます。

GetMergedRange(Int32,Int32,Boolean)メソッドをオーバーライドすると、独自のマージロジックを実装できます。その場合、このメソッドは頻繁に呼び出され、グリッドの外観と動作に影響するため、メソッドの一貫性と効率に留意してください。

使用例

次のコードは、選択後に現在のセルをチェックし、それがマージされた範囲の一部であるかどうかを確認します。

次のコードは、 GetMergedRange(Int32,Int32,Boolean)メソッドをオーバーライドして、独自のマージを提供します。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  flex.AllowMerging = AllowMergingEnum.Free
  flex.Rows(1).AllowMerging = True
  flex(1, 1) = "AAAA"
  flex(1, 2) = "AAAA"
  AddHandler flex.SelChange, AddressOf flex_SelChange
End Sub
        
Private Sub flex_SelChange(ByVal sender As Object, ByVal e As System.EventArgs) Handles flex.SelChange
  Dim rg As CellRange = flex.GetMergedRange(flex.Row, flex.Col, False)
  If Not rg.IsSingleCell Then
    Console.WriteLine("マージセル:{0},{1}-{2},{3}", _ rg.TopRow, rg.LeftCol, rg.BottomRow, rg.RightCol)
  End If
End Sub
private void Form1_Load(object sender, EventArgs e)
{
  flex.AllowMerging = AllowMergingEnum.Free;
  flex.Rows[1].AllowMerging = true;
  flex[1, 1] = "AAAA";
  flex[1, 2] = "AAAA";
  flex.SelChange += flex_SelChange;
}
          
private void flex_SelChange(object sender, System.EventArgs e)
{
  CellRange rg = flex.GetMergedRange(flex.Row, flex.Col, false);
  if (!rg.IsSingleCell)
  {
    Console.WriteLine("マージセル:{0},{1}-{2},{3}", rg.TopRow, rg.LeftCol, rg.BottomRow, rg.RightCol);
  }
}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  Dim flex As CustomMerge = New CustomMerge
  flex.Rows.Count = 20
  flex.Cols.Count = 10
  flex.Width = 500
  flex.Height = 200
  Me.Controls.Add(flex)
End Sub
          
Public Class CustomMerge
  Inherits C1FlexGrid
  Public Sub New()            
    ' デフォルトでフリーマージを許可します。
    AllowMerging = AllowMergingEnum.Free
    For r As Integer = 0 To Rows.Count - 1
      Rows(r).AllowMerging = True
    Next r
    For c As Integer = 0 To Cols.Count - 1
      Cols(c).AllowMerging = True
    Next c
  End Sub
  
  Public Overrides Function GetMergedRange(ByVal row As Integer, ByVal col As Integer, ByVal clip As Boolean) As CellRange
    ' 範囲 (1,1) ~ (3,3) のセルをマージします。
    If row >= 1 And row <= 3 And col >= 1 And col <= 3 Then
      Return GetCellRange(1, 1, 3, 3)
    End If
    
    ' その他のセルはマージしません。
    Return GetCellRange(row, col)
  End Function
End Class
private void Form1_Load(object sender, EventArgs e)
{
  CustomMerge flex = new CustomMerge(); 
  flex.Rows.Count = 20;
  flex.Cols.Count = 10;
  flex.Width = 500;
  flex.Height = 200;
  this.Controls.Add(flex);
}
          
public class CustomMerge : C1FlexGrid
{
  public CustomMerge()
  {
    // デフォルトでフリーマージを許可します。
    AllowMerging = AllowMergingEnum.Free;
    for (int r = 0; r < Rows.Count; r++)
      Rows[r].AllowMerging = true;
    for (int c = 0; c < Cols.Count; c++)
      Cols[c].AllowMerging = true;
  }
  
  override public CellRange GetMergedRange(int row, int col, bool clip)
  {
    // 範囲 (1,1) ~ (3,3) のセルをマージします。
    if (row >= 1 && row <= 3 && col >= 1 && col <= 3)
      return GetCellRange(1, 1, 3, 3);
    
    // その他のセルはマージしません。
    return GetCellRange(row, col);
  }
}
参照

C1FlexGrid クラス
C1FlexGrid メンバ
オーバーロード一覧