十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你数字输出方法不对
成都创新互联公司专注于泗阳网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供泗阳营销型网站建设,泗阳网站制作、泗阳网页设计、泗阳网站官网定制、重庆小程序开发公司服务,打造泗阳网络公司原创品牌,更为您提供泗阳网站排名全网营销落地服务。
你要把
xxx.WriteLine()
换成
xxx.Write()
WriteLine()方法会在每次输出后自动添加换行符,所以看起来就是一列
求行:
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
通过对最后一个字符的位置(总长度)的行来判断呗,不过也得加一。
Dim mycon As New SqlConnection(connstrs)
Dim sqlStr As String = "SELECT * FROM [Column] FROM [Table]"
Dim cmd As New SqlCommand(sqlStr, mycon)
Dim reader = cmd.ExecuteReader()
Dim i As Integer = 1
While reader.Read()
Dim txt As New TextBox()
txt.Name = "txt" + i
txt.Size = New Size(100, 20) '文本框大小
txt.Location = New Point(50, i * 20 + 20)'left:50 top:随便写的,自己看着调
txt.Text = reader.GetValue(0).ToString()
Me.Controls.Add(txt) 'Me 可以改为你要添加上去的对象
End While
'未经过运行,自己调试看看能否OK
可先计算出文本框TextBox1中的总行数,然后在行号框TextBox2中填上从1到总行数的行号。
再用API函数GetScrollPos分别获得文本框和行号框当前行号,最后再使用API函数SendMessage使行号框的行号滚动到对应的行数。
因为文本框的滚动条没有滚动事件,可以暂时使用一个Timer定时刷新,虽然方法笨了点,但暂时只能这么用了
代码如下:
Private Declare Function GetScrollPos Lib "user32" (ByVal handle As IntPtr, ByVal nbar As Integer) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a as integer
a = GetScrollPos(TextBox1.Handle, 1)
Dim b as integer
b = GetScrollPos(TextBox2.Handle, 1)
SendMessage(TextBox2.Handle, HB6, 0, a-b)
End Sub
你可以这样,如果你用 dataGridview 时不是也要查询表嘛,
我们用datatable/dataset 保存你查询的结果,
然后就可以一条条显示,记录住当前显示的row(行)
eg:你的查询保存 datatable1
第一条时,
我们就来个 dim dtrow as datarow=datatable.rows(0)
textbox1.text=dtrow.item("字段名")'
...
都是如此
当然也是可能绑定的
CurrencyManager 用于管理显示的行数
textbox.DataBindings.add("属性",data,"字段")
1、添加TextBox控件
2、设置TextBox属性
3、编写代码
4、运行效果