【问题标题】:datagridview mousehover event how to determine which column you are ondatagridview mousehover 事件如何判断你在哪一列
【发布时间】:2015-10-15 18:05:23
【问题描述】:

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

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 列(工具提示将包含相当多的文本)这里的 mousehover 事件,我怎么能从 mousehover 事件中调用一个方法并传入正确的列号?

【问题讨论】:

  • 您是否为特定列显示相同的工具提示文本,还是动态的?

标签: c# .net winforms datagridview tooltip


【解决方案1】:

您无需在悬停事件中指定列的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 是-1 用于列标题单元格,ColumnIndex 是-1 用于行标题单元格。

【讨论】:

  • 设计师——我想这是最简单的方法——是的,在这个项目中我可以使用设计师,因为列永远不会改变。我可以在 datagridview 属性的列集合中添加该列,该属性有一个工具提示点。但我确实喜欢 var p, var info 建议。那也行。
【解决方案2】:

使用 DataGridViewCellEventArgs:

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

【讨论】:

    【解决方案3】:

    试试这个:

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2013-03-03
      相关资源
      最近更新 更多