משיב מוביל
שמירת תוכן מעוצב בפקד RICH TEXT BOX בWPF

שאלה
-
שלום,
יש לי פקד RICH TEXT BOX לעיצוב טקסט,(BOLD, SIZE, FONT-FAMILY)
איך אני שומרת את העיצוב של המשתמש (הטקסט שבRTB) -כך שכאשר אני שומרת את התוכן של הRTB בקובץ ישמר לי גם העיצוב?
נתקלתי בקובץ RTF, השאלה שלי האם זה נכון להשתמש בצורה הזו, ואיך זה מסתדר אם אני שומרת את התוכן בDATA BASE?
(אם אני שומרת במסד נתונים אני לא צריכה לשמור בקובץ RTF, האם אפשר לשמור רק במסד נתונים עם העיצוב? ואם כן איך מבצעים את זה?)
תשובות
-
הפקד RichTextBox של WPF מחזיק את התוכן במאפיין בשם Document שהוא מסוג FlowDocument.
מכאן ששמירה לדיסק היא קוד לשמירה וטעינה של FlowDocument לדיסק, ככה:
// Save var source = YourRTB.Document; var range = new TextRange(source.ContentStart, source.ContentEnd); using (var stream = File.Create("output.pak")) { range.Save(stream, DataFormats.XamlPackage); } // Load using(var stream = File.OpenRead("output.pak")) { var target = YourRTB.Document; var range = new TextRange(target.ContentStart, target.ContentEnd); range.Load(stream, DataFormats.XamlPackage); }
נעזרתי בקוד מכאן: http://wpftutorial.net/FlowDocuments.html
- נערך על-ידי לומדים יום שלישי 28 אוקטובר 2014 09:50
- הוצע כתשובה על-ידי Eran Sharvit יום שלישי 28 אוקטובר 2014 12:42
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
-
צהריים טובים
בהמשך לתשובה של לומדים, את יכולה ליצור קובץ (בזכרון, לא פיסי) ולשמור אותו במסד הנתונים. זו דרך מאוד נפ]וצה ומאוד יעילה. היא מאפשרת גישה לקובץ לא רק דרך תיבת הטקסט בעתיד אלא גם בגישה ישירה באפליקציה למשל. כשרוצים לעבוד עם התוכן פשוט טוענים את הקובץ והוא נטען כולל העיצוב.
אפשרות שנייה מאוד נפוצה היא לבצע המרה של התוכן ל HTML ולשמור את התוכן של ה HTML במסד הנתונים כשרשרת פשוטה.
אפשרות נוספת תוכלי לראות כאן:
http://www.codeproject.com/Questions/576956/Storingplusdataplusofplusrichplustextplusboxplusto
http://www.codeproject.com/Articles/12932/Saving-and-Restoring-RichTextBox-Formatted-Text-Al
בעקרון את צריכה לעבוד עם
string rtfText = this.richTextBox1.Rtf
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום שלישי 28 אוקטובר 2014 13:35
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
כל התגובות
-
הפקד RichTextBox של WPF מחזיק את התוכן במאפיין בשם Document שהוא מסוג FlowDocument.
מכאן ששמירה לדיסק היא קוד לשמירה וטעינה של FlowDocument לדיסק, ככה:
// Save var source = YourRTB.Document; var range = new TextRange(source.ContentStart, source.ContentEnd); using (var stream = File.Create("output.pak")) { range.Save(stream, DataFormats.XamlPackage); } // Load using(var stream = File.OpenRead("output.pak")) { var target = YourRTB.Document; var range = new TextRange(target.ContentStart, target.ContentEnd); range.Load(stream, DataFormats.XamlPackage); }
נעזרתי בקוד מכאן: http://wpftutorial.net/FlowDocuments.html
- נערך על-ידי לומדים יום שלישי 28 אוקטובר 2014 09:50
- הוצע כתשובה על-ידי Eran Sharvit יום שלישי 28 אוקטובר 2014 12:42
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
-
תודה על התגובה,
אבל עדיין לא עונה לי על השאלה: האם אני יכולה לשמור את הטקסט המעוצב שבRTB למסד נתונים כמו SQL כך שאוכל להטעין את התוכן מהמסד נתונים בחזרה לRTB באותו מצב ששמרתי אותו(שישמר העיצוב),איך אני עושה את זה?
אני רוצה לשמור במסד נתונים כמו SQL ולא בקובץ כמו שכתבת למעלה "(file.Creat("output.pak"
או שכדי לשמור את העיצוב במסד נתונים צריך לשמור קודם באיזה שהוא קובץ, ואם כן עם איזה סיומת?(כמו RTF, מה זה סיומת PAK? )
אשמח לפרוט,
תודה
-
צהריים טובים
בהמשך לתשובה של לומדים, את יכולה ליצור קובץ (בזכרון, לא פיסי) ולשמור אותו במסד הנתונים. זו דרך מאוד נפ]וצה ומאוד יעילה. היא מאפשרת גישה לקובץ לא רק דרך תיבת הטקסט בעתיד אלא גם בגישה ישירה באפליקציה למשל. כשרוצים לעבוד עם התוכן פשוט טוענים את הקובץ והוא נטען כולל העיצוב.
אפשרות שנייה מאוד נפוצה היא לבצע המרה של התוכן ל HTML ולשמור את התוכן של ה HTML במסד הנתונים כשרשרת פשוטה.
אפשרות נוספת תוכלי לראות כאן:
http://www.codeproject.com/Questions/576956/Storingplusdataplusofplusrichplustextplusboxplusto
http://www.codeproject.com/Articles/12932/Saving-and-Restoring-RichTextBox-Formatted-Text-Al
בעקרון את צריכה לעבוד עם
string rtfText = this.richTextBox1.Rtf
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום שלישי 28 אוקטובר 2014 13:35
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 02 נובמבר 2014 11:53
-
סליחה, לא שמתי לב שזה למסד נתונים. את יכולה לעשות כמו שפיתוח הציע, במקום Stream של קובץ להשתמש בMemoryStream ככה:
// Save var source = YourRTB.Document; var range = new TextRange(source.ContentStart, source.ContentEnd); using (MemoryStream stream = new MemoryStream()) { range.Save(stream, DataFormats.XamlPackage); byte[] bytesForSaveInDb = stream.ToArray(); //Save bytesForSaveInDb in your DataBase here, as binary field. } // Load byte[] input = //load bytes from db using(var stream = MemoryStream (input)) { var target = YourRTB.Document; var range = new TextRange(target.ContentStart, target.ContentEnd); range.Load(stream, DataFormats.XamlPackage); }
השדה במסד צריך להיות מסוג varbinary.
- נערך על-ידי לומדים יום חמישי 30 אוקטובר 2014 13:17
-