Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Βοηθεια για richtextbox

Îåêßíçóå áðü ôï ìÝëïò breton. Τελευταία δημοσίευση από το μέλος Im4g3 στις 30-06-2007, 19:33. Υπάρχουν 14 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-05-2007, 03:08 31830

    Βοηθεια για richtextbox

    Καλησπερα σε ολους. Πριν λιγο καιρο ανακαλυψα το forum και με εχει βοηθησει πολυ. Φτιαχνω την πρωτη μου εφαρμογη, εναν text editor με ενσωματωμενο πληκτρολογιο (σαν το "πληκτρολογιο οθονης" των windows περιπου. Την εχω προχωρησει αρκετα αλλα θα ηθελα την βοηθεια σας σε καποια πραγματα.

    Αποθηκευω και ανοιγω τα αρχεια με τον εξης κωδικα:

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

    ' Create a SaveFileDialog to request a path and file name to save to.

    Dim saveFile1 As New SaveFileDialog()

    ' Initialize the SaveFileDialog to specify the RTF extension for the file.

    saveFile1.DefaultExt = "*.rtf"

    saveFile1.Filter = "Rich Text files (*.rtf)|*.rtf|Text Files (*.txt)|*.txt|All files (*.*)|*.*"

    ' Determine if the user selected a file name from the saveFileDialog.

    If (saveFile1.ShowDialog() = System.Windows.Forms.DialogResult.OK) _

    And (saveFile1.FileName.Length) > 0 Then

    ' Save the contents of the RichTextBox into the file.

    RichTextBox1.SaveFile(saveFile1.FileName, _

    RichTextBoxStreamType.PlainText)

    End If

    End Sub

     

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

    ' Create an OpenFileDialog to request a file to open.

    Dim openFile1 As New OpenFileDialog()

    ' Initialize the OpenFileDialog to look for RTF files. 'Καπως να το κανω να φενονται

    openFile1.DefaultExt = "*.*" 'μονο τα αρχεια κειμενου

    openFile1.Filter = "All Files(*.*)|*.*"

     

    ' Determine whether the user selected a file from the OpenFileDialog.

    If (openFile1.ShowDialog() = System.Windows.Forms.DialogResult.OK) _

    And (openFile1.FileName.Length > 0) Then

    ' Load the contents of the file into the RichTextBox.

    RichTextBox1.LoadFile(openFile1.FileName, _

    RichTextBoxStreamType.PlainText)

    End If

    End Sub

    Το προγραμμα ανοιγει κανονικα τα αρχεια που εχει αποθηκευσει αλλα δεν ανοιγει τα αρχεια του word(βγαζει τους χαρακτηρες αλιωμενους, τετραγωνακια κλπ). Τι πρεπει να κανω για να τα ανοιγει; Υπαρχει το αντιστοιχο φιλτρο για τα αρχεια word οπως για τα rtf για παραδειγμα;

    Οταν παω να ανοιξω το αποθηκευμενο rtf με το word ζηταει ορισμο κωδικοποιησης. Πως θα το αποφυγω αυτο;

    Αλλο προβλημα ειναι οτι οταν κανω κλικ σε καποιο button o κερσορας εξαφανιζεται απο το richtextbox. Τι πρεπει να κανω για να μην γινεται αυτο;

    Επισης εχω 4 button που θελω να μετακινουν τον κερσορα (πανω,κατω,αριστερα,δεξια) μεσα στο κειμενο και αλλο ενα που να λειτουργει οπως το enter στο word, να πηγαινει δηλαδη τον κερσορα στην επομενη γραμμη.

    Τελος (επιτελους...) Εχω φτιαξει button για αποκοπη, αντιγραφη, επικολληση και θελω να φτιαξω μερικα ακομα για στοιχηση κειμενου, εντονα πλαγια, υπογραμμηση, γραμματοσειρα και αναιρεση/επαναληψη. Λιγη βοηθεια (και) σε αυτο;

    Το ξερω οτι ζηταω πολλα. Αν δεν μπορειται να απαντησετε σε ολα αυτα βοηθηστε με, σε καποια απο αυτα. 

    Παραδειγματα θα βοηθουσαν πολυ.

    Ευχαριστω. 

  •  16-05-2007, 03:13 31831 σε απάντηση της 31830

    Απ: Βοηθεια για richtextbox

    Ελπιζω να μην εκανα post σε λαθος θεμα...

  •  16-05-2007, 13:07 31848 σε απάντηση της 31831

    Απ: Βοηθεια για richtextbox

    Καλώς ήλθες στην παρέα μας!

    Οχι, δεν έκανες post σε λάθος θέμα - απλά ορισμένες φορές χρειάζεται λίγο ...υπομονή :)

    EDIT: Λογω έλλειψης χρόνου αδυνατώ να απαντήσω αυτή τη στιγμή, απλά πρόσεξα κάτι: Αποθηκεύεις ο,τι έχει το richtextbox ως plain text (RichTextBoxStreamType.PlainText) και όχι ως RTF που από ο,τι φαίνεται έχεις σκοπό να κάνεις.

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  16-05-2007, 21:18 31862 σε απάντηση της 31848

    Απ: Βοηθεια για richtextbox

    Καταρχην ευχαριστω για την ανταποκριση στην ερωτηση μου. Βασικα τι ειναι το plain text;  Το προγραμμα αποθηκευει κανονικα σε rtf και txt, αναλογα τι επιλογη θα κανω στο παραθυρο διαλογου. Πρωτη επιθυμια μου ειναι να ανοιγει και να αποθηκευει (και) αρχεια word, αν γινεται αυτο. Αν δεν γινεται συμβιβαζομαι με τα rtf. Οταν βρεις χρονο μου απαντας...
  •  27-05-2007, 01:08 32247 σε απάντηση της 31830

    Απ: Βοηθεια για richtextbox

    Αλλο προβλημα ειναι οτι οταν κανω κλικ σε καποιο button o κερσορας εξαφανιζεται απο το richtextbox. Τι πρεπει να κανω για να μην γινεται αυτο;

    Επισης εχω 4 button που θελω να μετακινουν τον κερσορα (πανω,κατω,αριστερα,δεξια) μεσα στο κειμενο

    Σε αυτα μπορει να με βοηθησει καποιος; Στα υπολοιπα εβγαλα ακρη.

    Ευχαριστω.

  •  15-06-2007, 12:08 32940 σε απάντηση της 31862

    Απ: Βοηθεια για richtextbox

    Γεια και απο εμένα breton.

    Είμαι καινούργιος στο συγκεκριμένο site αλλά μπορώ να σε βοηθήσω αρκετά στα προβλήματά σου όσον αφορά τις λειτουργίες του RixhTextBox (rtb).

    Καταρχήν να σου εξηγήσω τι είναι plain text και τι rtf. Plain text είναι ενα απλό κείμενο σε μορφή .txt. Rtf είναι ενα format που υποστηρίζει διαφορετικά fonts/fontstyles/fontsizes/fontcolors. Αποθηκεύεται όλη η πληροφορία σχετικά με τα χαρακτηριστικά του κειμένου (που έχεις είτε στο .doc αρχείο σου είτε στο rtb σου), κάτι που σημαίνει οτι μπορείς να παίρνεις ένα κείμενο από ένα αρχείο.doc (word αρχείο) αλλά και να δημιουργείς ένα τέτοιο αρχέιο χωρίς να εμφανίζονται τετραγωνάκια και περίεργοι χαρακτήρες.

    To 2o πρόβλημά σου που αφορά την εξαφάνιση του tou cursor από το rtb κάθε φορά που πατάς ένα button μπορεί να λυθεί αν στο τέλος της υπορουτίνας κάθε button γράψεις (έστω οτι το RichTextBox σου το έχεις ονομάσει rtb1):

    rtb1.focus()

    Για τη στοίχιση εισάγεις 3 buttons με ονόματα CenterBtn, LeftBtn, RightBtn και ο κώδικας είναι:

    Private Sub LeftBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbrLeft.Click

    rtb1.SelectionAlignment = HorizontalAlignment.Left

    End Sub

    Private Sub CenterBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbrCenter.Click

    rtb1.SelectionAlignment = HorizontalAlignment.Center

    End Sub



    Private Sub RightBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbrCenter.Click

    rtb1.SelectionAlignment = HorizontalAlignment.Right

    End Sub

    Για τη ρύθμιση του μεγέθους εισάγεις ένα combobox με όνομα SizeCmbx και στη συνέχεια πας στα properties του combobox---> items ----> collection και προσθέτεις τα μεγέθη που θες. Αν κοιτάξεις ένα word proccessor θα δεις πόσα μεγέθη έχει και προσθέτεις τα ίδια αν θες. Στο event SelectedIndexChanged του combobox προσθέτεις τον κώδικα:

    Dim FONT As New Font(rtb1.SelectionFont, SizeCmbx.Text, rtb1.SelectionFont.Style, GraphicsUnit.Point)

    rtb1.SelectionFont = FONT

    Για τα διάφορα fonts που θες να έχεις στο rtb, εισάγεις ένα καινούργιο combobox με όνομα FontCmbx και προσθέτεις τον εξής κώδικα στην υπορουτίνα που κάνει load η φόρμα σου:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim ff As FontFamily

    For Each ff In System.Drawing.FontFamily.Families

    FontCmbx.Items.Add(ff.Name)

    Next

    End Sub

    Ο παραπάνω κώδικας είναι για να εισάγεις όλα τα fonts που βρίσκονται στο system στο PC που τρέχεις το project.

    Αν θες να βάλεις κάποια συγκεκριμένα fonts στο rtb σου (κάτι που προτείνω γιατι δεν έχουν όλα τα fonts regula bold italics κλπ - πχ. υπάρχουν fonts που δε μπορούν να πάρουν regular fontstyle με αποτέλεσμα να εμφανίζονται διάφορα λάθη κατά την εκτέλεση του project και ενώ υπάρχει εναλλαγή στα fonts) θα χρησιμοποιήσεις τον παρακάτω κώδικα:

    FontCmbx.Items.AddRange(New String() {"Microsoft Sans Serif", "Verdana", "Times New Roman", "Arial"})

    Με τον παραπάνω κώδικα προσθέτεις στο combobox σου 4 fonts: Sans Serif, Verdana, TΝR και Arial.

    Αφού επιλέξεις κάποια από τις 2 περιπτώσεις για να εισάγεις στοιχεία στο FontCmbx, στο event SelectedIndexChanged του FontCmbx προσθέτεις τον παρακάτω κώδικα:

    Dim FONT As New Font(FontCmbx.Text, SizeCmbx.Text, NewFStyle, GraphicsUnit.Point)

    rtb1.SelectionFont = FONT

    Όπως παρατηρείς στον παραπάνω κώδικα υπάρχει συνδυασμός του μεγέθους και του font που επιλέγεις. Μπορείς να αλλάξεις τον κώδικα του SizeCmbx στον εξής κώδικα:

    Dim FONT As New Font(FontCmbx.text, SizeCmbx.Text, rtb1.SelectionFont.Style, GraphicsUnit.Point)

    rtb1.SelectionFont = FONT

    ώστε να συνδυάζεις και εκεί τις αλλαγές στα index των comboboxes.

    Τα ίδια ισχύουν για τα fontstyle (Bold, Italics, Underline). Για παράδειγμα για έντονη γραφή (bold) εισάγεις ένα button με όνομα BoldBtn και προσθέτεις τον παρακάτω κώδικα.

    Dim FONT As New Font(FontCmbx.text, SizeCmbx.Text, Fontstyle.Bold, GraphicsUnit.Point)

    rtb1.SelectionFont = FONT

    Τα ίδια και για υπογράμμιση και πλάγια γραφή (Underline και Italics).

     

    Για να κάνεις Undo και Redo εισάγεις 2 button με ονόματα UndoBtn και RedoBtn και προσθέτεις τον παρακάτω κώδικα:

    Private Sub UndoBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UndoToolStripMenuItem1.Click

    If rtb1.CanUndo Then rtb1.Undo()

    End Sub

    Private Sub RedoBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UndoToolStripMenuItem1.Click

    If rtb1.CanRedo Then rtb1.Redo()

    End Sub

    Αυτά προς το παρόν (δε θυμάμαι τι αλλο έχεις ζητήσει :P).

    Τηα ξανακοιτάξω το thread να δω τι έχεις ζητήσει και αν δω κάτι άλλο που μπορώ να βοηθήσω θα το κάνω post.

    Με εκτίμηση,

    Θεόδωρος Παναγιωτακόπουλος.


    What's been so strong has been and gone.
  •  15-06-2007, 12:19 32941 σε απάντηση της 32940

    Απ: Βοηθεια για richtextbox

    Αγαπητέ φίλε, καλωσήλθες αρχικά! Λυπάμαι που θα σε καλοσωρίσω με παρατήρηση αλλά είμαι λόγω ρόλου αναγκασμένος να το κάνω. Παραθέτω απόσπασμα από τους κανονισμούς του DotNetZone.gr:

    Δε γράφουμε greekglish. Μπορεί να ήταν cool στο πανεπιστήμιο/σχολή/chat στο irc, αλλά εδώ βγάζουν τα ματάκια των υπολοίπων. Συν του ότι το search τα παίρνει στο κρανίο και βγάζει ότι αποτελέσματα γουστάρει. Αν γράφετε greekglish, οι πιθανότητες να διαβάσει κάποιος το μήνυμά σας μειώνονται πολύ. Οι πιθανότητες να σας απαντήσει κάτι που να μη θυμίζει φιλοσοφικό μονόλογο αυστραλο-μπαμπουϊνου με πονόκοιλο μειώνονται ακόμα πιο πολύ. Αν δεν μας πιστεύετε, δοκιμάστε να στέλνετε mail σε greekglish στον εργοδότη σας και θα ανακαλύψετε σε λίγο καιρό ότι οι εγκαταστάσεις του ΟΑΕΔ θα σας φαίνονται πολύ οικείες.
    Τα greekglish λοιπόν, αν δεν το καταλάβατε, δεν επιτρέπονται, εκτός από εξαιρετικές περιπτώσεις (μη δυνατότητα πρόσβασης σε υπολογιστή με Ελληνικά), για τις οποίες ο χρήστης είναι υποχρεωμένος να ενημερώνει ως μέρος του μηνύματός του. Οι διαχειριστές του dotNETZone.gr έχουν το δικαίωμα να διαγράψουν άμεσα μήνυμα το οποίο είναι δημοσιευμένο σε greekglish χωρίς προειδοποίηση. An den to katalavate, na sas to ksanapoume: Oi diaxeiristes tou dotNETZone.gr exoun to dikaioma na diagrapsoun amesa minima to opoio einai dimosieymeno se greekglish.

    Θα παρακαλούσα λοιπόν να μετατρέψεις σε εύλογο χρόνο το μήνυμά σου σε Ελληνικά.

    EDIT: Ευχαριστούμε θερμά εκ μέρους του DotNETZone.gr για την άμεση ανταπόκριση!

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  15-06-2007, 12:25 32942 σε απάντηση της 32940

    Απ: Βοηθεια για richtextbox

    Όσον αφορά το  save και το load για ένα rtb και αφού θες να διατηρείται το Rich Text Format (rtf) θα πρότεινα τον εξής κώδικα.

    Private Sub SaveBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveBtn.Click

    If rtb1.Text = "" Then

    Dim answer As Integer

    answer = MessageBox.Show(("The current document has no data, would you like to save it?"), "Empty Document", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

    If answer = Windows.Forms.DialogResult.No Then

    Exit Sub

    Else

    Savefile()

    End If

    Else

    Savefile()

    End If

    End Sub

    Private Sub Savefile()

    SaveFileDialog1.InitialDirectory = "C:\Documents and Settings\XP\My Documents"

    SaveFileDialog1.DefaultExt = "rtf"

    SaveFileDialog1.Filter = "Rich Text Files(*.rtf)|*.rtf|Text Files(*.txt)|*.txt|HTML Files|*.htm|All Files|*.*"

    SaveFileDialog1.ShowDialog()

    rtb1.SaveFile(SaveFileDialog1.FileName)

    If Windows.Forms.DialogResult.Cancel Then

    Exit Sub

    End If

    End Sub

    Gia to load:

    Private Sub OpenBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenBtn.Click

    If rtb1.Modified Then

    Dim answer As Integer

    answer = MessageBox.Show("The current document has not been saved, would you like to continue without saving?", "Unsaved Document", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

    If answer = Windows.Forms.DialogResult.No Then

    Exit Sub

    Else

    openfile()

    End If

    Else

    openfile()

    End If

    End Sub

    Private Sub openfile()

    OpenFileDialog1.InitialDirectory = "C:\Documents and Settings\XP\My Documents"

    OpenFileDialog1.DefaultExt = "rtf"

    OpenFileDialog1.Filter = "Rich Text Files(*.rtf)|*.rtf|Text Files(*.txt)|*.txt"

    OpenFileDialog1.ShowDialog()

    rtb1.LoadFile(OpenFileDialog1.FileName)

    If Windows.Forms.DialogResult.Cancel Then

    Exit Sub

    End If

    End Sub

     

    Γιο αποκοπή - αντιγραφή - επικόλληση (cut - copy - paste) εισάγεις 3 buttons με ονόματα CutBtn, CopyBtn και PasteBtn και προσθέτεις τον παρακάτω κώδικα:

    Private Sub CutBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CutBtn.Click

    If rtb1.SelectedText <> "" Then

    rtb1.Cut()

    End If

    End Sub

    Private Sub CopyBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopyBtn.Click

    If rtb1.SelectionLength > 0 Then

    rtb1.Copy()

    End If

    End Sub

    Private Sub PasteBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PasteBtn.Click

    If Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) = True Then

    ' Determine if any text is selected in the text box.

    If rtb1.SelectionLength > 0 Then

    ' Ask user if they want to paste over currently selected text.

    If MessageBox.Show("Do you want to paste over current selection?", _

    "Cut Example", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then

    Exit Sub

    Else

    ' Move selection to the point after the current selection and paste.

    rtb1.SelectedText = ""

    rtb1.Paste()

    'Οι 2 παραπάνω γραμμές σβήνουν το επιλεγμένο κείμενο και κάνουν επικόλληση

    End If

    End If

    ' Paste current text in Clipboard into text box.

    rtb1.Paste()

    End If

    End Sub

    Ελπίζω να σου έδωσα τη βοήθεια που ήθελες για να φτιάξεις τον ton editor σου.

    Με συγχωρείτε για τα greeklish που χρησιμοποίησα αλλα δεν είχα διαβάσει οτι δεν επιτρέπονται.

    Με εκτίμηση,

    Θεόδωρος Παναγιωτακόπουλος.


    What's been so strong has been and gone.
  •  15-06-2007, 13:33 32944 σε απάντηση της 32942

    Απ: Βοηθεια για richtextbox

    Θεόδωρε ευχαριστούμε θερμά εκ μέρους του DotNETZone.gr για την άμεση ανταπόκριση και τη μετατροπή των μηνυμάτων σου σε Ελληνικά. Καλή συνέχεια!

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  27-06-2007, 01:07 33197 σε απάντηση της 32942

    Απ: Βοηθεια για richtextbox

    Kαλησπερα.

    Το πρόγραμμα το εχω προχωρησει αρκετα. Εχουν μεινει καποια μικροπροβληματα που νομιζω οτι θα ειναι θεμα μιας λεπτομεριες στον κωδικα. Σε αυτα λοιπον θα ηθελα λιγη βοήθεια.

    Με αυτον τον κωδικα εισαγω χαρακτηρες στο rtb:

    Private Sub insertText(ByVal txt As String)

    With rtbDoc

    Dim start As Integer = .SelectionStart

    .Text = .Text.Substring(0, start) + txt + .Text.Substring(start)

    .SelectionStart = start + 1

    .ScrollToCaret()

    .Focus()

    End With

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Select Case True

    Case CheckBox1.Checked = True

    If System.Drawing.ColorTranslator.ToOle(Button24.BackColor) = &HFFFF Then

    TextBox1.Text = TextBox1.Text & "α"

    Else

    TextBox1.Text = TextBox1.Text & "Α"

    End If

    TextBox1.SelectionStart = TextBox1.Text.Length

    TextBox1.ScrollToCaret()

    TextBox1.Focus()

    Case CheckBox1.Checked = False

    If System.Drawing.ColorTranslator.ToOle(Button24.BackColor) = &HFFFF Then

    insertText("α")

    Else

    insertText("Α")

    End If

    End Select

    End Sub

     

    Με αυτον τον κωδικα το "α" ή το "Α" εισαγεται στο σημειο που ειναι ο κερσορας. 

    Για το backspace χρησιμοποιω αυτο:

    If CheckBox1.Checked = False Then

    Dim L As Integer = Len(rtbDoc.Text) - 1 'Σβησιμο

    If L < 0 Then Return

    rtbDoc.Text = Strings.Left(rtbDoc.Text, L)

    rtbDoc.SelectionStart = rtbDoc.Text.Length

    rtbDoc.ScrollToCaret()

    rtbDoc.Focus()

    Else

    Dim L As Integer = Len(TextBox1.Text) - 1 'Σβησιμο

    If L < 0 Then Return

    TextBox1.Text = Strings.Left(TextBox1.Text, L)

    TextBox1.SelectionStart = TextBox1.Text.Length

    TextBox1.ScrollToCaret()

    TextBox1.Focus()

    End If

    Δεν σβηνει ομως τον χαρακτηρα αριστερα απο τον κερσορα, σβηνει τον τελευταιο χαρακτηρα του κειμενου. Πως το φτιαχνω αυτο;

    Για το enter χρησιμοποιω αυτο: insertText(vbCrLf). Δουλευει μια χαρα αλλα, αν εχω μια λεξη στοιχησμενη στο κεντρο ας πουμε, βαλω τον κερσορα στην μεση της λεξης και πατησω το enter, δουλευει αλλα η στοιχηση παει αριστερα. Πως διορθωνεται αυτο;

    Για την στοιχηση χρησιμοποιουσα τον κωδικα που προτεινεις. Αυτος ομως αλλαζει το font σε μια γραμμη, ακομα και αν δεν ειναι μαρκαρισμενη. Αυτο ειναι λαθος για την επεξεργασια του κειμενου. Πρεπει το κουμπι να ανταποκρινεται μονο αν υπαρχει μαρκαρισμενο κειμενο ή αν δεν υπαρχει ότι γραφτεί μετα να εχει την αναλογη στοιχηση. Τωρα χρησιμοποιω αυτο:

    If rtbDoc.SelectedText > "" Then

    rtbDoc.SelectionAlignment = HorizontalAlignment.Right

    End If

    rtbDoc.SelectionStart = rtbDoc.Text.Length

    rtbDoc.ScrollToCaret()

    rtbDoc.Focus()

    Αλλαζει την στοιχηση στο μαρκαρισμενο κειμενο αλλα δεν αλλαζει την στοιχηση αν το rtb ειναι κενο. Λογικα θα ειναι κατι απλο και αυτο...

     

    Τέλος, το font και το colorfont. Αυτος ειναι ο κωδικας:

    Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click, Button122.Click, Button101.Click

    If Not rtbDoc.SelectionFont Is Nothing Then

    FontDialog1.Font = rtbDoc.SelectionFont

    Else

    FontDialog1.Font = rtbDoc.Font

    End If

    FontDialog1.ShowApply = True

    If FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

    rtbDoc.SelectionFont = FontDialog1.Font

    End If

    rtbDoc.SelectionStart = rtbDoc.Text.Length

    rtbDoc.ScrollToCaret()

    rtbDoc.Focus()

    End Sub

    Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click, Button123.Click, Button102.Click

    ColorDialog1.Color = rtbDoc.ForeColor

    If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

    rtbDoc.SelectionColor = ColorDialog1.Color

    End If

    rtbDoc.SelectionStart = rtbDoc.Text.Length

    rtbDoc.ScrollToCaret()

    rtbDoc.Focus()

    End Sub

    Το προβλημα ειναι ιδιο με το font. Αν δεν υπαρχει μαρκαρισμενο κειμενο ή το rtb ειναι κενο δεν δουλευει, δηλαδη αν γραψω ενα γραμμα μετα απο την αλλαγη του font το γραμμα δεν θα εχει το νεο font αλλα το παλιο.

    Ευχαριστώ.

    Γιωργος - Κορυδαλλος

  •  27-06-2007, 11:23 33213 σε απάντηση της 33197

    Απ: Βοηθεια για richtextbox

    Γειά σου και πάλι Γιώργο.

    Κατ'αρχήν δεν καταλαβαίνω γιατί πρέπει να γράψεις κάποιο κώδικα ο οποίος να διαχειρίζεται την εισαγωγή χαρακτήρων στο rtb, τη λειτουργία του backspace και τη λειτουργία του enter. Έχω την εντύπωση οτι ο κώδικας που έχεις εισάγει για τη λειτουργία των παραπάνω είναι αυτός που σου δημιουργεί το πρόβλημα.

    Επίσης δεν καταλαβαίνω τη χρήση του textbox και του checkbox στον κώδικά σου που ακολουθεί:

    Case CheckBox1.Checked = True

    If System.Drawing.ColorTranslator.ToOle(Button24.BackColor) = &HFFFF Then

    TextBox1.Text = TextBox1.Text & "α"

    Else

    TextBox1.Text = TextBox1.Text & "Α"

    End If 

    Δοκίμασε να παραλείψεις αυτο τον κώδικα και δες πάλι τη συμπεριφορά του rtb στα προβλήματα που αντιμετωπίζεις.

    Σχετικά με τη στοίχιση νομίζω οτι κάνεις λάθος. Δεν είναι σωστό να αλλάζει η στοίχιση μόνο στο μαρκαρισμένο κέιμενο αλλά σε όλο το κείμενο που βρίσκεται μέσα στο rtb. Φυσικά αν θες να κάνεις κάτι τέτοιο (να έχεις διάφορες στοιχίσεις μέσα στο κείμενό σου) μπορείς να το πετύχεις χρησιμοποιώντας ένα πιο εξειδικευμένο κώδικα παρόμοιο με αυτόν που θα σου δώσω παρακάτω (για font/size/color).

    Στον παρακάτω κώδικα που χρησιμοποιείς:

    If rtbDoc.SelectedText > "" Then

    rtbDoc.SelectionAlignment = HorizontalAlignment.Right

    End If

    rtbDoc.SelectionStart = rtbDoc.Text.Length

    rtbDoc.ScrollToCaret()

    rtbDoc.Focus()

    λες οτι δεν αλλάζει η στοίχιση όταν το rtb είναι κενό. Αν άλλαζες τον κώδικά σου στον:

    If rtbDoc.SelectedText > ""

     Then

    rtbDoc.SelectionAlignment = HorizontalAlignment.Right

    Else

    rtbDoc.SelectionAlignment = HorizontalAlignment.Right

    End If

    τότε μάλλον δε θα έχεις πρόβλημα.

    Οσον αφορά τα προβλήματά σου σχετικά με το font και το color σίγουρα θα χρειαστείς μια υπορουτίνα η οποία θα χειρίζεται τη συμπεριφορά του κειμένου κατά την αλλαγή των τιμών του font του size και του color.

    Η παρακάτω υπορουτίνα θα λύσει σίγουρα το πρόβλημά σου σχετικά με τη συμπεριφορά του κειμένου κατά την αλλαγή σε font/size/color (Το πρόβλημά σου είναι οτι στον κώδικά σου δεν καθορίζεις τι πρέπει να γίνει αν δεν υπάρχει selected text. Όπως και με το alignment δεν καθόριζες μέσα από των κώδικα τη συμπεριφορά του rtb σε περίπτωση μη μαρκαρισμένου κειμένου, αλλά προσδιορίζεις μόνο τι πρέπει να γίνει οταν έχεις selected κείμενο γι'αυτό και δε γίνεται τίποτα όταν το rtb είναι κενό ή οταν δεν εχεις μαρκάρει τίποτα).

    Private Sub ChangeBlockStyle1(ByVal newFontStyle As String, ByVal SelectionStart As Integer, ByVal SelectionLength As Integer)

    Dim OldFStyle As Font

    Dim NewFStyle As New Drawing.FontStyle

    If SelectionLength = 0 Then

    OldFStyle = rtb1.SelectionFont

    NewFStyle = OldFStyle.Style

    '// apply the style to the font

    Dim FONT As New Font(ComboBox2.Text, ComboBox1.Text, NewFStyle, GraphicsUnit.Point)

    '// apply the font to the selection.

    rtb1.SelectionFont = FONT

    Else

    For i As Integer = SelectionStart To SelectionStart + SelectionLength - 1

    rtb1.SelectionStart = i

    rtb1.SelectionLength = 1

    OldFStyle = rtb1.SelectionFont

    NewFStyle = OldFStyle.Style

    Dim FONT As New Font(ToolStripComboBox2.Text, ToolStripComboBox1.Text, NewFStyle, GraphicsUnit.Point)

    rtb1.SelectionFont = FONT

    Next

    End If

    Εnd Sub

    Τα 2 comboboxes χρησιμοποιούνται για αλλαγή σε font και size αντίστοιχα όπως είχα περιγράψει στο προηγούμενό μου post.

    Στο event SelectedIndexChanged του combobox που έχεις για την αλλαγή των fonts προσθέτεις τον παρακάτω κώδικα:

    Private Sub ComboBox1.SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    Dim SelectionStart As Integer = rtb1.SelectionStart

    Dim SelectionLength As Integer = rtb1.SelectionLength

    Dim NewFStyle As New Drawing.FontStyle

     

    ChangeBlockStyle1(NewFStyle, SelectionStart, SelectionLength)

    rtb1.SelectionLength = SelectionLength

    rtb1.SelectionStart = SelectionStart

    rtb1.Focus()

    End Sub

    Ομοίως και για το color και το size της γραμματοσειράς του rtb.

    Δοκίμασε αυτα και ενημέρωσέ με για τα όποια προβλήματα αντιμετωπίσεις.

    Με εκτίμηση

    Θεόδωρος Παναγιωτακόπουλος.


    What's been so strong has been and gone.
  •  28-06-2007, 00:31 33232 σε απάντηση της 33213

    Απ: Βοηθεια για richtextbox

    Θοδωρή καλησπέρα. Ευχαριστώ για την βοήθεια.

    Καταρχήν το checkBox και το textBox πες πως δεν υπάρχουν. Στο textbox εισάγονται οι χαρακτήρες, αν είναι μαρκαρισμένο το checkbox. Το ίδιο συμβαίνει και χωρίς αυτά. Το πρόβλημα είναι νομίζω στον κώδικα του enter. Θα το θέσω διαφορετικά. Θελω τον κώδικα που χρειάζεται για να κάνει το εξής: Αν ο κέρσορας είναι ανάμεσα σε μια λέξη, ο κέρσορας και τα γράμματα δεξιά του, να πηγαίνουν μια σειρά κάτω. Αν ο κέρσορας είναι στο τέλος της λέξης ή στην αρχή μιας κενής γραμμής να πηγαίνει μια σειρά κάτω. Να κάνει με λίγα λόγια ότι κάνει το enter του πληκτρολόγιου στο Word. Αυτο:

    insertText(vbCrLf)

    δουλευει κανονικα αλλα χαλαει η στοιχηση του κειμενου. Μηπως πρεπει να προσθεσω κατι;

    Για να καταλάβεις θέλω να καταργήσω την χρήση του πληκτρολογίου και να γίνονται όλα από το πληκτρολόγιο του προγράμματος με ένα κλικ. Ελπίζω να καταλαβαίνεις τι εννοώ.

    Το πρόβλημα στο σβήσιμο είναι οτι αυτός ο κώδικας

    Dim L As Integer = Len(rtbDoc.Text) - 1            

                If L < 0 Then Return

     

                rtbDoc.Text = Strings.Left(rtbDoc.Text, L)

                rtbDoc.SelectionStart = rtbDoc.Text.Length

                rtbDoc.ScrollToCaret()

                rtbDoc.Focus()

    σβήνει τον τελευταίο χαρακτήρα. Εγώ θέλω να σβήνει αυτόν που είναι αριστερά από τον κέρσορα. Ακριβώς δηλαδή ότι κάνει το backspace του πληκτρολόγιου.

    Για την στοίχιση ήθελα ακριβώς αυτό! Να έχω διάφορες στοιχίσεις στο rtb. Δουλεύει μια χαρά με την αλλαγή που μου είπες να κάνω. Ευχαριστώ!

    Για το font θέλω να έχω ένα button για όλα. Για αυτό χρησιμοποιώ τα dialog. Στο fontDialog έχει όλα όσα χρειάζονται χωρίς να πρέπει να πάω κάπου αλλού για να αλλάξω κάτι άλλο. Μόνο το fontColor είναι σε άλλο button. Το πρόγραμμα πρέπει να είναι όσο το δυνατόν πιο απλό στην χρήση του. Θα προτιμούσα λοιπόν να χρησιμοποιήσω dialog και όχι combobox. Αν μπορείς σε παρακαλώ πες μου πως θα διορθώσω το πρόβλημα χρησιμοποιώντας dialog. Πώς θα του πω δηλαδή τι να κάνει αν δεν υπάρχει μαρκαρισμένο κείμενο.

    Ευχαριστώ πολυ.

  •  29-06-2007, 10:38 33275 σε απάντηση της 33232

    Απ: Βοηθεια για richtextbox

    Δυστυχώς δε μπορώ να σε βοηθήσω προς το παρόν με το enter και το backspace γιατί είμαι σε διακοπές και στο laptop δεν εχω Visual Studio.

    Αλλά σχετικά με το fontdialog θα πρέπει να ξέρεις οτι είναι σε κλειστή μορφή. Δηλαδή ο κώδικάς του δε γίνεται να αλλαχτεί. Με το fontdialog όλες οι αλλαγές γίνονται σε ολόκληρο το rtb και όχι σε ένα μαρκαρισμένο τμήμα του, ή στο κείμενο που θες να γράψεις μετά την αλλαγή σε font/size/style. Γι' αυτό σου πρότεινα τα comboboxes και τα style buttons (bold, italic,underline) για να έχεις μια πλήρη διαχείριση του κειμένου σου όπως στο word.

    Με εκτίμηση,

    Θεόδωρος Παναγιωτακόπουλος.


    What's been so strong has been and gone.
  •  29-06-2007, 23:54 33288 σε απάντηση της 33275

    Απ: Βοηθεια για richtextbox

    Αν και ηλπιζα να υπαρχει λυση, θα δοκιμασω οπως μου λες. Για το enter και το backspace μπορω να περιμενω...

    Ευχαριστω.

  •  30-06-2007, 19:33 33294 σε απάντηση της 33288

    Απ: Βοηθεια για richtextbox

    Δυστυχώς με το dialog δε νομίζω να υπάρχει δυνατότητα να χειριστείς το κείμενο οπως εσύ θες. Την τετάρτη θα είμαι πίσω στο γραφείο, θα κοιτάξω το enter και το backspace και αν μπορέσω να βρω κάτι θα σε ενημερώσω.

    Με εκτίμηση,

    Θεόδωρος Παναγιωτακόπουλος.


    What's been so strong has been and gone.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems