Как получить индекс столбца ультра сетки вид правой кнопкой мыши - PullRequest
3 голосов
/ 29 ноября 2011

Когда я щелкаю правой кнопкой мыши на ультра сетке или может быть сеткой.Я хочу отображать разные контекстные полосы для разных столбцов.Но когда я щелкаю правой кнопкой мыши, я получаю индекс столбца, который я выбрал не, который я щелкнул правой кнопкой мыши.Как я должен получить это .. Код выглядит следующим образом:

 Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
       If e.Button() = Windows.Forms.MouseButtons.Right Then
            MessageBox.Show(DataGridView1.SelectedCells(0).ColumnIndex.ToString())
        End If
    End Sub

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Лучший способ получить UltraColumn под курсором - использовать событие MouseUp класса UltraGrid . Вот пример на C #, но я уверен, что вы поймете мою идею:

private void Grid_MouseUp(object sender, MouseEventArgs e)
{
    UltraGrid Grid = sender as UltraGrid;
    if (Grid.DisplayLayout == null)
        return;
    UIElement ue = Grid.DisplayLayout.UIElement.ElementFromPoint(new Point(e.X, e.Y));
    if (ue == null)
        return;

    UIElement mouseupItem = ue;
    UltraGridColumn mouseupColumn = null;
    UltraGridRow mouseupRow = null;
    UltraGridBand mouseupBand = null;
    ColumnHeader mouseupColumnHead = null;

    mouseupColumn = (UltraGridColumn)ue.GetContext(typeof(UltraGridColumn), true);
    mouseupRow = (UltraGridRow)ue.GetContext(typeof(UltraGridRow), true);
    mouseupBand = (UltraGridBand)ue.GetContext(typeof(UltraGridBand), true);
    mouseupColumnHead = (ColumnHeader)ue.GetContext(typeof(ColumnHeader), true);

    if (mouseupColumnHead != null)
        mouseupColumn = mouseupColumnHead.Column;

    if (e.Button == MouseButtons.Right)
    {
        ShowPopupMenu( mouseupColumn );
        return;
    }
}
1 голос
/ 29 ноября 2011

Вам нужно использовать hitTest, чтобы получить columnIndex, который вы ищете, например:

    If e.Button = Windows.Forms.MouseButtons.Right Then
        Dim hit As DataGridView.HitTestInfo = _
                DataGridView1.HitTest(e.X, e.Y)
        MsgBox(hit.ColumnIndex.ToString)
    End If

Я лично не знаком с UltraGrid, но он должен иметь то же самое, что и большинство элементов управления сеткой.Если нет, вы можете использовать следующее:

http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.aspx?ArticleID=1750

и адаптировать его, чтобы получить вместо этого столбец.

...