如何让文本框里的某一行高亮显示

ccbbcc 2018-10-25 04:06:50
请问高手,如何让文本框里的某一行高亮显示?谢谢
...全文
438 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
无·法 2018-10-26
  • 打赏
  • 举报
回复
如果只需要选择当前点击的行只要一行代码就可以了。
Private Sub CodeMax1_MouseUp(ByVal Button As CodeMax4Ctl.cmMouseBtn, ByVal Modifiers As CodeMax4Ctl.cmKeyMod, ByVal X As Long, ByVal Y As Long)
CodeMax1.SelectLine CodeMax1.GetSel(False).EndLineNo, True
End Sub
无·法 2018-10-26
  • 打赏
  • 举报
回复
楼主,建议你得用专门控件CodeMax,文字前景色和背景色都可以自由设置


Option Explicit

Dim lngLastLine As Long

Private Sub Form_Load()
CodeMax1.SetColor cmClrLeftMargin, &H808080
CodeMax1.SetColor cmClrLineNumberBk, &H808080

CodeMax1.AddText "test" & vbCrLf
CodeMax1.AddText "fdsafffffffffffffasdgf" & vbCrLf
CodeMax1.AddText "111111111111" & vbCrLf
CodeMax1.AddText "234234" & vbCrLf
CodeMax1.AddText "fdsfas" & vbCrLf
End Sub

Private Sub CodeMax1_MouseUp(ByVal Button As CodeMax4Ctl.cmMouseBtn, ByVal Modifiers As CodeMax4Ctl.cmKeyMod, ByVal X As Long, ByVal Y As Long)
Dim r As New CodeMax4Ctl.Range
Set r = CodeMax1.GetSel(False)
CodeMax1.SetLineColor lngLastLine, vbWhite
CodeMax1.SetLineColor r.EndLineNo, vbBlue
lngLastLine = r.EndLineNo
End Sub

下载地址:https://download.csdn.net/download/sysdzw/1275316
脆皮大雪糕 2018-10-26
  • 打赏
  • 举报
回复

Option Explicit

Private Sub Form_Load()
Text1.Text = ""
Text1.Text = Text1.Text & "这是一个" & vbCrLf
Text1.Text = Text1.Text & "测试用的" & vbCrLf
Text1.Text = Text1.Text & "好几行的 " & vbCrLf
Text1.Text = Text1.Text & "字符串 " & vbCrLf
Text1.Text = Text1.Text & "用来做测试" & vbCrLf

selectline (1)
End Sub



Private Sub selectline(intNum As Integer)
Dim i As Integer
Dim lngStart As Long, lngEnd As Long
lngStart = 0
For i = 1 To intNum - 1
lngStart = InStr(lngStart + 1, Text1.Text, vbCrLf)
Next
lngEnd = InStr(lngStart + 1, Text1.Text, vbCrLf)
Text1.SelStart = lngStart
Text1.SelLength = lngEnd - lngStart
End Sub
ccbbcc 2018-10-26
  • 打赏
  • 举报
回复
谢谢脆皮大雪糕,可是这两个方法我试了,都不行
脆皮大雪糕 2018-10-26
  • 打赏
  • 举报
回复
觉得你的需求应该是使用listbox控件
脆皮大雪糕 2018-10-26
  • 打赏
  • 举报
回复
再给你一个高亮任一行的方法吧
调用 selectlin(1) 就选择第一行了


Private Sub selectline(intNum As Integer)
Dim i As Integer
Dim lngStart As Long, lngEnd As Long
lngStart = 0
For i = 1 To intNum - 1
lngStart = InStr(lngStart + 1, Text1.Text, vbCrLf)
Next
lngEnd = InStr(lngStart + 1, Text1.Text, vbCrLf)
Text1.SelStart = lngStart
Text1.SelLength = lngEnd - lngStart
End Sub
of123 2018-10-26
  • 打赏
  • 举报
回复
引用 7 楼 chenbingjy 的回复:
谢谢!可以了,现在文本框点击哪行哪行就高亮显示。
我看不懂代码,不知道怎么改。我还想窗体一加载就第一行高亮。
大神再指点一下。
    Text1.SelStart = 0
Text1.SelLength = InStr(1, Text1.Text, vbCrLf) - 1
ccbbcc 2018-10-26
  • 打赏
  • 举报
回复
谢谢!可以了,现在文本框点击哪行哪行就高亮显示。
我看不懂代码,不知道怎么改。我还想窗体一加载就第一行高亮。
大神再指点一下。
舉杯邀明月 2018-10-25
  • 打赏
  • 举报
回复
大雪糕的方法不错啊。
利用 SelStart属性,就不需要API了。
我一开始就没想到这个属性(几乎没使用它啊,都把它“遗忘”了 
 就“顺势”的想到用API了……


参考楼上 大雪糕 的思路,把Click( ) 事件过程改成这样就行了:
Private Sub Text1_Click()
Dim lngStart As Long, lngEnd As Long
Dim i As Integer

i = Text1.SelStart
lngStart = InStrRev(Text1.Text, vbLf, i)
lngEnd = InStr(1& + i, Text1.Text, vbLf)
If (0& = lngEnd) Then
lngEnd = Len(Text1.Text)
Else
lngEnd = lngEnd - 2&
End If
Text1.SelStart = lngStart
Text1.SelLength = lngEnd - lngStart
End Sub

这样,不管最后那一行是否换行、或者结尾几个空白行,都“效果正常”。
脆皮大雪糕 2018-10-25
  • 打赏
  • 举报
回复
试试看,点到最后一行会报错,自己看怎么控制边界吧,懒得改了
脆皮大雪糕 2018-10-25
  • 打赏
  • 举报
回复

Option Explicit

Private Sub Form_Load()
Text1.Text = ""
Text1.Text = Text1.Text & "这是一个" & vbCrLf
Text1.Text = Text1.Text & "测试用的" & vbCrLf
Text1.Text = Text1.Text & "好几行的 " & vbCrLf
Text1.Text = Text1.Text & "字符串 " & vbCrLf
Text1.Text = Text1.Text & "用来做测试" & vbCrLf
End Sub

Private Sub Text1_Click()
Dim i As Integer
Dim lngStart As Long, lngEnd As Long
lngStart = Text1.SelStart
lngEnd = InStr(lngStart + 1, Text1.Text, vbCrLf)
For i = lngStart To 1 Step -1
If Mid(Text1.Text, i, 2) = vbCrLf Then
lngStart = i + 1
Exit For
End If
lngStart = 0
Next
Text1.SelStart = lngStart
Text1.SelLength = lngEnd - lngStart
End Sub
舉杯邀明月 2018-10-25
  • 打赏
  • 举报
回复
如果是“选定”效果的话,可以用API,获取“光标”所在的行、该行从哪个字符起始、哪个字符结束。
然后,就是用代码设置textBox的“选定范围”就行了。

ccbbcc 2018-10-25
  • 打赏
  • 举报
回复
谢谢!我没表达清楚。
我的意思,文本框显示多行文字。
鼠标点击哪行,哪行就高亮显示。
脆皮大雪糕 2018-10-25
  • 打赏
  • 举报
回复

Option Explicit

Private Sub Form_Load()
Text1.Text = "这是一个测试用的字符串显示在文本框里"
Text1.SelStart = 4 '从第4个后面开始
Text1.SelLength = 7 '选7个字符
End Sub



7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧