PDA

View Full Version : سوال: پاک کردن خط خاص در RichTextBox ؟؟



سپهر-111
جمعه 31 شهریور 1391, 17:18 عصر
سلام دوستان و اساتید گرامی
در مورد پاک کردن سطر خاص ، در ریچ تکستباکس دوتا سوال داشتم

سوال اول:
فرض کنید توی یک ریچ تکستباکس ، ده سطر نوشته وارد میکنیم
حالا میخوایم سطر دهم را پاک کنیم و بجای ان نوشته دیگری وارد کنیم؟؟
چطور باید این کار انجام بدم ؟؟؟

سوال دوم :
حالا اگر بخوام فقط سطر هفتم پاک کنم و به جاش یه نوشته دیگه بزارم چکار باید بکنم ؟؟

ممنون میشم دوستان راهنمایی بفرمایند:تشویق:
باتشکر

arenaw
جمعه 31 شهریور 1391, 17:37 عصر
سلام
فکر میکنم مشکلتون با اینی که نوشتم حل بشه

Private Function ChangeLine(ByVal Str As String, ByVal NewStr As String, ByVal Line As Integer) As String
Dim i#, a$()
a = Split(Str, vbCrLf)
If Line - 1 < LBound(a) Or Line - 1 > UBound(a) Then
ChangeLine = Str
Else
For i = LBound(a) To UBound(a)
If i = Line - 1 Then
ChangeLine = ChangeLine & NewStr & vbCrLf
Else
ChangeLine = ChangeLine & a(i) & vbCrLf
End If
Next
ChangeLine = Left$(ChangeLine, Len(ChangeLine) - 2) 'For remove last vbcrlf
End If
End Function


طرز استفاده:

RichTextBox1.Text = ChangeLine(RichTextBox1.Text, "Salam Khubi?", 7)

سپهر-111
جمعه 31 شهریور 1391, 17:55 عصر
سلام
فکر میکنم مشکلتون با اینی که نوشتم حل بشه

Private Function ChangeLine(ByVal Str As String, ByVal NewStr As String, ByVal Line As Integer) As String
Dim i#, a$()
a = Split(Str, vbCrLf)
If Line - 1 < LBound(a) Or Line - 1 > UBound(a) Then
ChangeLine = Str
Else
For i = LBound(a) To UBound(a)
If i = Line - 1 Then
ChangeLine = ChangeLine & NewStr & vbCrLf
Else
ChangeLine = ChangeLine & a(i) & vbCrLf
End If
Next
ChangeLine = Left$(ChangeLine, Len(ChangeLine) - 2) 'For remove last vbcrlf
End If
End Function


طرز استفاده:

RichTextBox1.Text = ChangeLine(RichTextBox1.Text, "Salam Khubi?", 7)



سلام
ممنون از پاسخ شما
ولی این کار من راه نمی اندازه ، چون با این روش کل نوشته های تکستباکس به یک رنگ و یک نوع فونت و اندازه در میاد (اخه من هر خط با یک فونت خاص و رنگ و سایز .... نوشتم)

من فقط میخوام سطر اخر پاک کنم و تاثیری توی نوشته های قبلی نداشته باشه

باتشکر

سپهر-111
جمعه 31 شهریور 1391, 22:41 عصر
دوستان کسی راه حلی نداره ؟؟؟؟

arenaw
شنبه 01 مهر 1391, 00:00 صبح
اول این فانکشنارو بزارید تو مادژول

Public Function LinePos(ByVal Str As String, ByVal Line As Integer) As Integer
Dim i#, a$(), Lines#
Lines = AllLine(Str)
If Line = 1 Then
LinePos = 0
ElseIf Line > Lines Or Line < 1 Then
LinePos = -1
ElseIf Lines > 1 Then
a = Split(Str, vbCrLf)
For i = LBound(a) To (Line - 1) - 1
LinePos = LinePos + Len(a(i)) + Len(vbCrLf)
Next i
End If
End Function
Public Function AllLine(ByVal Str As String) As Integer
Dim a$()
If InStr(1, Str, vbCrLf) = 0 Then
AllLine = 1
Else
a = Split(Str, vbCrLf)
AllLine = UBound(a) + 1
End If
End Function
Public Function ReadLine(ByVal Str As String, ByVal Line As Integer) As String
Dim a$()
If Line > AllLine(Str) Or Line < 1 Then
ReadLine = vbNullString
Else
a = Split(Str, vbCrLf)
ReadLine = a(Line - 1)
End If
End Function



بعد توی برنامتون اینجوری استفاده کنید:

Dim Line#
Line = 4
RichTextBox1.SelStart = LinePos(RichTextBox1.Text, Line)
RichTextBox1.SelLength = Len(ReadLine(RichTextBox1.Text, Line))
RichTextBox1.SelText = "Chizi k mikhayd bezarid tu khatte 4"

ASedJavad
شنبه 01 مهر 1391, 00:04 صبح
سلام
این چند مرحله رو انجام بده:
1- شماره اولین کاراکتر خط مورد نظر رو بدست بیار
2- شماره آخرین کاراکتر خط مورد نظر رو بدست بیار

برا این دو مورد بارها و بارها خود من، اقای واژدی و سایر دوستان نمونه کد گذاشتیم
3- با استفاده از selstart و sellength کل خط رو انتخاب کن.
4- seltext ریچ تکست باکست رو برابر با عبارتموردنظرت قرار بده

vbhamed
شنبه 01 مهر 1391, 09:53 صبح
سلام

با توجه به گفته آقا ASedJavad این میشه :



Function SelectText(rtb As RichTextBox, LineNumber As Long, NewText As String)
Dim Txt() As String
Txt = Split(rtb.Text, vbCrLf)
LineNumber = Val(LineNumber) - 1
rtb.SelStart = rtb.Find(Txt(LineNumber))
rtb.SelLength = Len(Txt(LineNumber))
rtb.SelText = NewText
End Function

Private Sub Command1_Click()
Call SelectText(RichTextBox1, 2, "A")
End Sub



تو اين روش اگر قبل از خط مورد نظر خط تكراري داشته باشيم اون انتخاب ميشه و نتيجه نادرست هست

vbhamed
شنبه 01 مهر 1391, 10:00 صبح
سلام

Private Sub ChangeLine(L As Long, newText As String)

Dim p&, s&, tl&, t() As String

L = L - 1

With RichTextBox1

t = Split(.Text, vbCrLf)
If L > UBound(t) Or L < 0 Then Exit Sub

For i = 0 To UBound(t)
If .GetLineFromChar(s) = L Then
.SelStart = s
tl = Len(t(i))
Exit For
End If
s = s + Len(t(i)) + 2
tl = Len(t(i))
Next
.SelLength = tl
DoEvents
.SelText = newText

End With

End Sub

Private Sub Command1_Click()
ChangeLine 6, "6 - ********************* This is a new Text *********************"
End Sub

Private Sub Form_Load()
RichTextBox1.LoadFile "test.rtf"
End Sub

امین مستانی
شنبه 01 مهر 1391, 12:11 عصر
سلام

Private Sub ChangeLine(L As Long, newText As String)

Dim p&, s&, tl&, t() As String

L = L - 1
If L > UBound(t) Or L < 0 Then Exit Sub

With RichTextBox1

t = Split(.Text, vbCrLf)

For i = 0 To UBound(t)
If .GetLineFromChar(s) = L Then
.SelStart = s
tl = Len(t(i))
Exit For
End If
s = s + Len(t(i)) + 2
tl = Len(t(i))
Next
.SelLength = tl
DoEvents
.SelText = newText

End With

End Sub

Private Sub Command1_Click()
ChangeLine 6, "6 - ********************* This is a new Text *********************"
End Sub

Private Sub Form_Load()
RichTextBox1.LoadFile "test.rtf"
End Sub




ممنون از تذکرتون
ولی در کد شما هم یک مشکل کوچک وجود داره


If L > UBound(t) Or L < 0 Then Exit Sub


t هنوز هیچ مقداری نداره پس باید قبلش اینو بزارید

t = Split(RichTextBox1.Text, vbCrLf)

با تشکر

vbhamed
دوشنبه 03 مهر 1391, 08:14 صبح
سلام

حق با شماست، لحظه آخر داشتم كاري انجام مي‌دادم اون خط رو جابجا كردم، همون پست اصلاح شد