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"
但是如果你想知道鼠标悬停在哪一列和哪一行,你可以使用DataGridView
的HitTest
方法:
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
我想在我的 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"
但是如果你想知道鼠标悬停在哪一列和哪一行,你可以使用DataGridView
的HitTest
方法:
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