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 صبح
سلام
حق با شماست، لحظه آخر داشتم كاري انجام ميدادم اون خط رو جابجا كردم، همون پست اصلاح شد
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.