datagridview鼠标悬停事件如何判断你在哪一列

datagridview mousehover event how to determine which column you are on

我想在我的 datagridview 控件 (dgrv1) 上将鼠标悬停在 header 列上时显示工具提示。目前,我可以执行以下操作——但是——我的 datagridview 有几个列(每个工具提示都有很多文本),所以我想从鼠标悬停事件中调用一个方法。我的问题是我不知道如何捕获我悬停在哪一列上以传递给该方法。有趣的是,鼠标悬停事件在我当前的场景中选择了正确的列:

private void dgrv1_MouseHover(object sender, EventArgs e)
{  
    dgrv1.Columns[1].ToolTipText = "column 1";
    dgrv1.Columns[2].ToolTipText = "column 2";
    dgrv1.Columns[3].ToolTipText = "column 3";
}

如果我将鼠标悬停在第 1 列上 -- 将显示第 1 列的工具提示文本,第 2、3 列的工具提示文本也会显示...但不是列出 50 列(工具提示将包含相当多的文本) 在这里的鼠标悬停事件中,我如何才能从鼠标悬停事件中调用一个方法并传入正确的列号?

用 DataGridViewCellEventArgs 做:

private void DataGridView_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
  e.ColumnIndex //column
  e.RowIndex    //row
}

您无需在悬停事件中分配 ToolTipText 属性 列。你可以简单地使用 Designer 分配它们,或者如果你想在加载数据或加载表单事件时使用这样的代码:

foreach (DataGridViewColumn c in this.dataGridView1.Columns)
{
    c.ToolTipText = string.Format("Column {0}", c.Index + 1);
}

您还可以将文本分配给单元格的 ToolTip 属性:

this.dataGridView1.Rows[0].Cells[0].ToolTipText = "Some text"

但是如果你想知道鼠标悬停在哪一列和哪一行,你可以使用DataGridViewHitTest方法:

private void dataGridView1_MouseHover(object sender, EventArgs e)
{
    var p = this.dataGridView1.PointToClient(Cursor.Position);
    var info = this.dataGridView1.HitTest(p.X, p.Y);

    //You can use this values
    //info.ColumnX
    //info.RowY
    //info.ColumnIndex
    //info.RowIndex
}

注意 RowIndex 对于第 header 列单元格是 -1,ColumnIndex 对于第 header 行单元格是 -1。

试试这个:

Dim grvScreenLocation As Point = DGVRejected999Clm.PointToScreen(DGVRejected999Clm.Location)
            Dim tempX As Integer = DataGridView.MousePosition.X - grvScreenLocation.X + DGVRejected999Clm.Left
            Dim tempY As Integer = DataGridView.MousePosition.Y - grvScreenLocation.Y + DGVRejected999Clm.Top
            Dim hit As DataGridView.HitTestInfo = DGVRejected999Clm.HitTest(tempX, tempY)
            cellX = hit.RowIndex
            cellY = hit.ColumnIndex
            Dim col =DGVRejected999Clm.Columns(cellY).Name
            If col="INTERNAL_STATUS" THEN
            Dim value =DGVRejected999Clm.Rows(cellX).Cells(cellY).Value.ToString
               If Value="E" THEN
                   DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="999 ERROR"
                    Else If Value="F" Then
                      DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="EJECTED BY EDI SIMPLIFIED"
                    Else If value="N" Then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="NEW CLAIM"
                    Else If value="R" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="REGENERATED- WAITING FOR SUBMISSION"
                     Else If value="S" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="SUBMITTED"
                    Else If value="K" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="999 ACKNOWLEDGED"
                    Else If value="D" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="999 DENIED. RESUBMISSION REQUIRED"
                       Else If value="A" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="277 ACCEPTED"
                     Else If value="J" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="277 REJECTED"
                    Else If value="Q" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="REQUEUED"

                    Else If value="M" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="SEND TO PM-REJECTED by Payer"

                    Else If value="X" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="SEND TO PM-REJECTED by EDI Simplified"

                     Else If value="T" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="999 ACKNOWLEDGED-Payer dont support 277 - Payer Accepted"


                      Else If value="V" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="999 ACKNOWLEDGED-Payer dont support 277 - Payer Rejected"

                    Else If value="G" then
                    DGVRejected999Clm.Rows(cellX).Cells(cellY).ToolTipText="Rejected Claim - Review Required"



               End If
           End If