level 7
一个多行文本框,
里面有N行内容,
请问
如何每点一次按钮,
就自动删除前3行内容,直到文本内容全部清空为止
谢谢
2021年12月16日 08点12分
1
level 1
Dim Arr() As String
Dim Temp As String
If Text1.Text <> "" Then
If InStr(Text1.Text, vbCrLf) > 0 Then
Temp = ""
Arr = Split(Text1.Text, vbCrLf)
If UBound(Arr) > 1 Then
For i = 3 To UBound(Arr)
If Temp = "" Then
Temp = Arr(i)
Else
Temp = Temp & vbCrLf & Arr(i)
End If
Next
Text1.Text = Temp
End If
End If
End If
2021年12月17日 00点12分
3
多谢,多谢,可用
2021年12月17日 01点12分
这个思路可行,不过代码还可以优化,比如一开始没必要判定文本框是否为空,然后也没必要判断UBound(Arr)的值(For语句自己就判断了)
2021年12月17日 01点12分
@初音✨七奈 你自己复制代码把那些你认为需要去掉的去掉测试试下
2021年12月17日 01点12分
@贴吧用户_Qyb84K3 试过了,没有问题,删掉的是If Text1.Text <> "" Then和If UBound(Arr) > 1 Then这两句以及与它们搭配的End If,另外还把Temp = ""这句也删掉了
2021年12月17日 02点12分
level 1
Dim Temp As String
Dim i As Long
Dim NumberRows As Long
NumberRows = 3 '修改3为要删除的行数
i = 0
Temp = Text1.Text
If Temp <> "" Then
Do While InStr(Temp, vbCrLf) > 0
i = i + 1
Temp = Mid(Temp, InStr(Temp, vbCrLf) + 1, Len(Temp) - InStr(Temp, vbCrLf) )
If i = NumberRows Then
Exit Do
End If
Loop
Text1.Text = Temp
End If
2021年12月17日 02点12分
5
厉害了,这下方便了,谢谢大侠~~~~~~~~~~~~~
2021年12月17日 05点12分
level 11
上面这些办法用于有回车的内容,而如果是连续长内容就会不一样很麻烦,
我发现一个Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long可以返回中英混合文本所占长度,考虑用循环找出每行第几个字符是行尾,然后就可删掉前面
2021年12月17日 04点12分
6
level 11
Option Explicit
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Sub Command1_Click()
Text1.Text = DeleteLine(Text1.Text, 41, 3) '这里假设文本框一行41个半角字符
End Sub
Private Sub Form_Load()
Dim ILoad As Integer
Dim SLoad As String
SLoad = ""
For ILoad = 1 To 30
SLoad = SLoad & "1234567890"
Next ILoad
Text1.Text = SLoad
End Sub
Function DeleteLine(ByVal DeleteText As String, ByVal LineLength As Integer, ByVal DeleteRow As Integer) As String
Dim s As String
Dim n As Integer
Dim i As Integer
Dim j As Integer
DeleteLine = DeleteText
s = DeleteText
For j = 1 To DeleteRow
n = 0
For i = 1 To LineLength + 10
If lstrlen(Left(s, i)) = LineLength - 1 And lstrlen(Left(s, i + 1)) = LineLength + 1 Then
n = i
ElseIf lstrlen(Left(s, i)) = LineLength Then
n = i
End If
Next i
If n > 0 Then
s = Mid(s, n + 1)
Else
s = ""
End If
Next j
DeleteLine = s
End Function
2021年12月17日 04点12分
8
你这个实现的是什么功能, 我看不懂唉,把代码放进VB中测试,也没理解作用,是在一个长段落中截取特定数量字符吗?跟我的需求不太符合,我的每行内容不多
2021年12月17日 05点12分
level 1
Dim Temp As String
Dim Arr() As String
Dim NumberRows As Long
NumberRows = 3 '修改3为要删除的行数
If Text1.Text <> "" Then
Arr = Split(Text1.Text, vbCrLf)
If UBound(Arr) > 2 Then
For i = 0 To NumberRows - 1
If Temp = "" Then
Temp = Arr(i)
Else
Temp = Temp & vbCrLf & Arr(i)
End If
Next
Temp = Temp & vbCrLf
Text1.Text = Mid(Text1.Text, Len(Temp), Len(Text1.Text) - Len(Temp) + 1)
End If
End If
2021年12月17日 10点12分
10
多谢~~~~~~~~~~
2021年12月19日 23点12分
level 11
'再提供一个能处理回车的整合版
'在窗体上放置一个文本框Text1,并将其MultiLine属性设为True
'在窗体上放置一个按钮Command1
'运行程序,记住Text1每行最大多少个数字,替换41
Option Explicit
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Sub Command1_Click()
Text1.Text = DeleteLine(Text1.Text, 41, 3) '这里假设文本框一行41个半角字符
End Sub
Private Sub Form_Load()
Dim ILoad As Integer
Dim SLoad As String
SLoad = ""
For ILoad = 1 To 30
SLoad = SLoad & "1234567890"
Next ILoad
Text1.Text = SLoad
End Sub
Function DeleteLine(ByVal DeleteText As String, ByVal LineLength As Integer, ByVal DeleteRow As Integer) As String
Dim DeleteLineS As String
Dim DeleteLineN As Integer
Dim DeleteLineI As Integer
Dim DeleteLineJ As Integer
Dim DeleteLineB As Boolean
DeleteLine = DeleteText
DeleteLineS = DeleteText
For DeleteLineJ = 1 To DeleteRow
DeleteLineN = 0
DeleteLineB = True
For DeleteLineI = 1 To LineLength + 1
If lstrlen(Left(DeleteLineS, DeleteLineI)) <= LineLength + 1 Then
If Mid(DeleteLineS, DeleteLineI, 2) = vbCrLf Then
DeleteLineS = Mid(DeleteLineS, DeleteLineI + 2)
DeleteLineB = False
Exit For
Else
If lstrlen(Left(DeleteLineS, DeleteLineI)) = LineLength - 1 And lstrlen(Left(DeleteLineS, DeleteLineI + 1)) = LineLength + 1 Then
DeleteLineN = DeleteLineI
ElseIf lstrlen(Left(DeleteLineS, DeleteLineI)) = LineLength Then
DeleteLineN = DeleteLineI
End If
End If
End If
Next DeleteLineI
If DeleteLineB Then
If DeleteLineN > 0 Then
DeleteLineS = Mid(DeleteLineS, DeleteLineN + 1)
Else
DeleteLineS = ""
End If
End If
Next DeleteLineJ
DeleteLine = DeleteLineS
End Function
2021年12月17日 11点12分
11
谢谢!!!!!
2021年12月19日 23点12分