你是想获取总行数?还是选中行和列的索引?
创新互联是一家专业提供玉门企业网站建设,专注与网站建设、网站设计、H5技术、小程序制作等业务。10年已为玉门众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
获取总行数:dataGridView1.Rows.Count;
获取当前选中行索引:int
i
=
this.dataGridView1.CurrentRow.Index;
获取当前选中列索引:int
j
=
this.dataGridView1.CurrentCell.ColumnIndex;
Dim a As Integer '第一行a个孔
Dim b As Integer '第b个控
Dim c As Integer
Dim d As Integer
a = InputBox("输入第一行有a个孔")
b = InputBox("输入所求孔的序号")
c = (b \ (2 * a - 1)) * 2
d = b Mod (2 * a - 1)
If d 0 Then
If d = a Then
c = c + 1
Else
c = c + 2
End If
End If
Print "第" b "个孔处于第" c; "行"
可以把某个列为空就当做是空行,你连接字符串是hdr=no,也就是第一行不作为列标题,那么就是用的默认的列标题,F1,F2.。。这些。
比如,第一列的某行为空的话就当做是空行,你可以加这个条件 where len([F1]) 0
我们用一个比较时髦的办法,用面向对象思想把每一行做成一个类。
Class Value '声明Value为类
REM 类的公共数据
Public Type As String '类型rb或是rf
Public ValX As Double '表第二列
Public ValY As Double '表第三列
Public Sub New(t As String, x As String, y As String) '构造函数
Type = t '赋值
ValX = x
ValY = y
End Sub
REM 类的静态方法,用来得出结果x=(12.1+12.4)/2+(12.2+12.3)/2
Public Shared Function SolveX(ByRef Values() As Value) As Double '以一个Value数组为参数
Dim result1 As Double = 0 '第一个加数(12.1+12.4)/2
Dim count1 As Integer = 0 'rb的个数
For Each v In Values '遍历这个数组
If v.Type = "rb" Then '若是rb
result1 += v.ValX '先加进去
count1 += 1 '个数加一。也可以写成count1 = count1 + 1
End If
Next
result1 /= count1 '算出第一个加数。也可以写成result1 = result1 / count
Dim result2 As Double = 0 '依此类推,算出第二个加数
Dim count2 As Integer = 0
For Each v In Values
If v.Type = "rf" Then
result2 += v.ValX
count2 += 1
End If
Next
result2 /= count2
Return result1 + result2 '返回两个加数的和
End Function
REM 同样的
Public Shared Function SolveY(ByRef Values() As Value) As Double
Dim result1 As Double = 0
Dim count1 As Integer = 0
For Each v In Values
If v.Type = "rb" Then
result1 += v.ValY
count1 += 1
End If
Next
result1 /= count1
Dim result2 As Double = 0
Dim count2 As Integer = 0
For Each v In Values
If v.Type = "rf" Then
result2 += v.ValY
count2 += 1
End If
Next
result2 /= count2
Return result1 - result2
End Function
End Class
怎么使用这个类呢?
Dim values() As Value = {New Value("rb", 12.1, 1.1), _
New Value("rf", 12.2, 1.2), _
New Value("rf", 12.3, 1.3), _
New Value("rb", 12.4, 1.4)} '声明一个数组values并一次放入4个Value对象
Console.WriteLine("X = {0}", Value.SolveX(values)) 'Value.SolveX(数组)表示X结果
Console.WriteLine("Y = {0}", Value.SolveY(values)) 'Value.SolveY(数组)表示Y结果
Console.ReadKey()
求行:
RichTextBox1.GetLineFromChar(RichTextBox1.SelStart)+1
这个代码呢,我的理解呢,是获取在selstart的地方的行数。一般来讲selstart的地方都是光标的地方,然后会给你返回line。不过返回的时候要自己加1。不是很懂这个语法,有懂得可以教我一下
以上是求行数。
求列:
For i = 0 To RichTextBox1.SelStart
If RichTextBox1.GetLineFromChar(RichTextBox1.SelStart) - RichTextBox1.GetLineFromChar(RichTextBox1.SelStart - i) 0 Then Exit For
j = j + 1
Next i
这个for循环呢,讲的是检查这一行光标前有多少个列,然后用J输出列的个数。
因为VB6.0没有RichTextBox1.GetFirstCharIndexOfCurrentLine这种语法。所以就得自己模拟这个过程。
具体怎么检查的呢,首先将 i 从0循环到光标处,
如果 【光标字符数】处的行数 减去 【光标字符数减去 i 个字符数】处的行数小于0了,我写了个不为零。但此时写小于零就可以。那么代表着换行了,同时也代表着光标到上一行之间有多少字。用j存储循环次数,得出对应列数。(我们中文习惯是叫第一列,但程序实际上是第零列,但在循环的时候就注意到并解决这个问题了)
如果你替换写法,例如
If RichTextBox1.GetLineFromChar(RichTextBox1.SelStart) - RichTextBox1.GetLineFromChar(RichTextBox1.SelStart + i) 0 Then Exit For
j = j + 1
Next i
这个 J 就对应着光标到该行结尾有几个字符了,如果有需要可以使用,但一般不需要。
那么就像上面说的那样,行列都求出来了,最后用事件和TEXT或者caption表现出来就好了
至于说总行数
RichTextBox1.GetLineFromChar(Len(RichTextBox1.Text)) + 1
通过对最后一个字符的位置(总长度)的行来判断呗,不过也得加一。