0

目的是构建一个 3xn 数组(3 列,n 行),它显示/枚举整个数据视图的点击。

3 Columns Column1:点击次数,首先点击整个datagridview。Column2:点击整个datagridview的e.columnindex。Column3:点击整个datagridview的e.rowindex。

n 行:第 1 行:与整个 dgv 上的第一次点击相关的信息,即:(1,3,7)(点击 1,点击的列索引 3,点击的行索引 7)...。第 n 行;dgv 上的总点击次数。

这是我拥有的最好的代码:

Private Accums As New ArrayList
Private Sub ClickMouse(sender As Object, e As DataGridViewCellMouseEventArgs) Handles datagridview.CellMouseClick
Accums.Add(New Integer() {e.Clicks, e.ColumnIndex, e.RowIndex})
End Sub
4

2 回答 2

0

您需要处理DataGridViewCellClicked事件并从它提供的DataGridViewCellEventArgs参数中提取ColumnIndexRowIndex属性。之后的其余部分应该是创建新行(如有必要)并填充适当值的简单问题。

于 2013-05-21T22:34:23.493 回答
0

这应该根据需要创建结构(如果没有错误:D):

Dim ClikAr(2,-1) As Integer '-1 is described in MSDN. I have never tried it.

Private Sub ClickMouse(sender As Object, e As DataGridViewCellMouseEventArgs) Handles datagridview.CellMouseClick
   Dim ClickNum As Integer = Ubound(ClickAr,2)+1
   Redim Preserve ClickAr(2,ClickNum)
   ClickAr(0,ClickNum) = ClickNum
   ClickAr(1,ClickNum) = e.ColumnIndex
   ClickAr(2,ClickNum) = e.RowIndex

   'e.Clicks can be used to distinguish Double Clicks.  
End Sub

该解决方案的问题是每次单击时都会重新创建数组并将值复制到其中,这不是很有效。您可以事先创建一个大数组,但这也不是很有效。我认为原始解决方案更好。我修改的是稍微接近所需的结构,但数组中的第一项不是必需的,因为它是索引或 ArrayList

Private Accums As New ArrayList
Private Sub ClickMouse(sender As Object, e As DataGridViewCellMouseEventArgs) Handles datagridview.CellMouseClick
   Accums.Add(New Integer() {Accums.Count, e.ColumnIndex, e.RowIndex})
End Sub

在这两种情况下,我都使用创建的“记录”数量作为计数器。如果单独的计数器更方便,它可以在类级别声明并在事件过程中递增。

于 2013-05-22T21:40:06.437 回答