【概要】
様々な状況において、マウスの位置をもとに行や列、セルなどの情報を取得する必要があります。グリッド上の特定の位置に該当するUIElementを取得するためには、UIElement.ElementFromPointメソッドを使用します。

【該当するコンポーネント】
UltraWinGrid

【該当するバージョン】
全てのバージョン

【記事の種類】
FAQ 

【詳細】
(質問)ユーザーがクリックした行や列、セルを正確に判別するためには? 

(回答)まずグリッドのDisplayLayout.UIElementオブジェクトのElementFromPointメソッドを使用して、マウスのX/Y座標に相当するグリッド表面上のUIElementを取得します。 次に、UIElementに関連づけられた行(UltraGridRow)やセル(UltraGridCell)といった情報を取得するために、GetContextメソッドを使用します。 以下がそのコード例です。なお、マウスクリックイベントをハンドルするためには、MouseClick,MouseUp,MouseDownイベントなどを用います。

(C#)

private void ultraGrid1_MouseClick(object sender, MouseEventArgs e)
{
    UltraGrid grid = sender as UltraGrid;
    //マウス位置からエレメントを取得
    UIElement element = grid.DisplayLayout.UIElement.ElementFromPoint(e.Location);

    //または、LastElementEnteredを利用することも可能
    //UIElement el = grid.DisplayLayout.UIElement.LastElementEntered;

   StringBuilder sb = new StringBuilder();

    UltraGridRow row = element.GetContext(typeof(UltraGridRow)) as UltraGridRow;
    if (row != null)
    {
        //UltraGridRowを取得
        sb.AppendFormat("Row Index:{0}", row.Index);
        sb.AppendLine();
    }

    UltraGridColumn column = element.GetContext(typeof(UltraGridColumn)) as UltraGridColumn;
    if (column != null)
    {
        //UltraGridColumnを取得
        sb.AppendFormat("Column Index:{0}", column.Index);
        sb.AppendLine();
    }

    UltraGridCell cell = element.GetContext(typeof(UltraGridCell)) as UltraGridCell;
    if (cell != null)
    {
        //UltraGridCellを取得
        sb.AppendFormat("Cell Value:{0}", cell.Value);
        sb.AppendLine();
    }


    Infragistics.Win.UltraWinGrid.ColumnHeader colHeader = element.GetContext(typeof(Infragistics.Win.UltraWinGrid.ColumnHeader)) as Infragistics.Win.UltraWinGrid.ColumnHeader;
    if (colHeader != null)
    {
        //ColumnHeaderを取得
        sb.AppendFormat("Column Header Caption:{0}", colHeader.Caption);
        sb.AppendLine();
    }

    if (sb.Length > 0)
    {
        MessageBox.Show(sb.ToString());
    }
}

(VB)

Private Sub UltraGrid1_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs)

    Dim grid As UltraGrid = sender
    'マウス位置からエレメントを取得
    Dim element As UIElement = grid.DisplayLayout.UIElement.ElementFromPoint(e.Location)
    'または、LastElementEnteredを利用することも可能
    'elemnt = grid.DisplayLayout.UIElement.LastElementEntered

    Dim sb As New StringBuilder
    Dim row As UltraGridRow = element.GetContext(GetType(UltraGridRow))
    If Not row Is Nothing Then
        sb.AppendFormat("Row Index:{0}", row.Index)
        sb.AppendLine()
    End If

    Dim column As UltraGridColumn = element.GetContext(GetType(UltraGridColumn))
    If Not column Is Nothing Then
        sb.AppendFormat("Column Index:{0}", column.Index)
        sb.AppendLine()
    End If

    Dim cell As UltraGridCell = element.GetContext(GetType(UltraGridCell))
    If Not cell Is Nothing Then
        sb.AppendFormat("Cell Value:{0}", cell.Value)
        sb.AppendLine()
    End If

    Dim colHeader As Infragistics.Win.UltraWinGrid.ColumnHeader = element.GetContext(GetType(Infragistics.Win.UltraWinGrid.ColumnHeader))
    If Not colHeader Is Nothing Then
        sb.AppendFormat("Column Header Caption:{0}", colHeader.Caption)
        sb.AppendLine()
    End If

    If (sb.Length > 0) Then
        MessageBox.Show(sb.ToString())
    End If

End Sub
Tagged:

製品について

Ultimate UI for Windows Forms