کنترل RichTextBox

کنترل RichTextBox شبیه کنترل TextBox است با این تفاوت که این کنترل به شما اجازه می‌دهد که، قالب قسمت‌های مختلف متن آنرا تغییر دهید. کنترل TextBox به طور کلی برای پذیرفتن اطلاعات ورودی از کاربر بکار می‌رود، در صورتیکه کنترل RichTextBox برای نمایش دادن متن‌های قالب بندی شده و ذخیره‌ی آن در قالب Rich Text Format (RTF) به کار می‌رود.

richtextbox-control-01
در تصویر بالا شما تفاوت بین TextBox (بالا) و RichTextBox (پایین) را مشاهده می‌کنید. اگرچه شما می‌توانید یک TextBox را قالب بندی کنید، ولی این قالب بندی، به کل متن آن اعمال می‌شود. کنترل RichTextBox به شما اجازه می‌دهد که فقط قسمتی از کل متن داخل کنترل را قالب بندی کنید. شما می‌توانید از کنترل RichTextBox مانند کنترل TextBox برای گرفتن اطلاعات ورودی از کاربر استفاده کنید. هر دوی این کنترلها از کلاس TextBoxBase برگرفته می‌شوند بنابراین، بیشتر خواص آنها مثل خاصیت Text مشترک هستند. در جدول زیر خواص کنترل RichTextBox را مشاهده می‌کنید.

خاصیت توضیح
AcceptsTab مشخص می‌کند زمانی که دکمه‌ی Tab فشرده شد Focus بر روی آن قرار گیرد یا خیر.
CanRedo مشخص می‌کند که تمامی کارهایی که در داخل RichTextBox انجام شد می‌توانند دوباره اعمال شوند یا خیر.
CanUndo مشخص می‌کند که کاربر می‌تواند عملیات انجام شده در داخل RichTextBox را Undo کند یا خیر.
DetectUrls مشخص می‌کند که وقتی یک URL در RichTextBox تایپ شود، به طور خودکار قالب بندی شود یا خیر.
Lines اطلاعات مربوط به کنترل RichTextBox را مشخص می‌کند. چنانچه بر روی دکمه‌ی کنار این خاصیت کلیک کنید می‌توانید مقادیر آنرا را مشاهده و دستکاری کنید.
Modified مشخص می‌کند که محتوای RichTextBox پس از آخرین تغییرات دستکاری شده است یا خیر.
Multiline مشخص می‌کند که کنترل RichTextBox می‌تواند حالت چند خطی داشته باشد یا خیر (مقدار این خاصیت به طور پیش فرض برابر با True است).
ReadOnly مشخص می‌کند که کنترل RichTextBox فقط خواندنی است یا خیر.
Rtf متن کنترل RichTextBox را به همراه کدهای فرمت RichText (RTF) را در خود جای می‌دهد.
Scrollbars برای تعیین نوع Scroll بکار می‌رود. این خاصیت نیز مانند خاصیت ScrollBars کنترل Text Box است.
SelectedText متن داخل RichTextBox را در بر می‌گیرد.
SelectionBackColor رنگ پشت زمینه‌ی متن انتخاب شده را مشخص می‌کند.
SelectionBullet مشخص می‌کند که حالت گلوله‌ای به متن انتخاب شده اعمال شود یا خیر.
SelectionColor رنگ متن انتخاب شده را مشخص می‌کند.
SelectionFont نوع قلم متن انتخاب شده را مشخص می‌کند.
SelectionLength تعداد کاراکترهای متن انتخاب شده را مشخص می‌کند.
SelectionRightIndent فاصله بین ضلع راست کنترل RichTextBox و ضلع راست متن انتخاب شده یا محل درج جاری را مشخص می‌کند.
SelectionStart محل شروع قسمت انتخاب شده یا محل درج را مشخص می‌کند.
ShowSelectionMargin مشخص می‌کند که حاشیه‌ی انتخاب نمایش داده شود یا خیر.
Text متنی را درون کنترل RichTextBox قرار می‌دهد.
WordWrap متن درون کنترل RichTextBox را دسته بندی می‌کند.

در این قسمت با رویدادهایی آشنا می‌شوید که از آن‌ها می‌توانید برای کنترل RichTextBox استفاده کنید.

رویداد توضیح
LinkClicked زمانی که بر روی یک لینک کلیک می‌شود این رویداد رخ می‌دهد.
Protected زمانی رخ می‌دهد که کاربر بخواهد یک متن حفاظت شده را دستکاری کند.
TextChanged زمانی رخ می‌دهد که متن داخل RichTextBox دستکاری شود.
SelectionChanged زمانی رخ می‌دهد که متن انتخاب شده تغییر کند.

تغییر دادن قالب متن انتخاب شده

تعداد زیادی از خواص کنترل RichTextBox برای متن انتخاب شده استفاده می‌شوند. برای مثال، خاصیت SelectedText متنی را که توسط کاربر انتخاب شده است را مشخص می‌کند. همچنین شما می‌توانید از یک متد برای انتخاب یک متن استفاده کنید.

richTextBox1.Select(10, 11);

richtextbox-control-02

مقدار اول، نقطه‌ی شروع انتخاب و مقدار دوم تعداد کاراکترهایی را که باید از نقطه‌ی شروع انتخاب شوند را، مشخص می‌کند. وقتی ما یک متن را انتخاب می‌کنیم، می‌توانیم متن انتخاب شده را به وسیله‌ی تعداد زیادی از خواص که بر روی متن انتخاب شده کار می‌کنند قالب بندی کنیم. برای مثال، شما می‌توانید برای تغییر رنگ متن انتخاب شده از خاصیت SelectionColor استفاده کنید. همچنین می‌توانید برای تغییر رنگ پس زمینه‌ی آن از خاصیت SelectionBackColor استفاده کنید.

richTextBox1.SelectionColor = Color.Red;

richTextBox1.SelectionBackColor = Color.Yellow;

شما با استفاده از متد DeselectAll می‌توانید متن انتخاب شده را با کلیک بر روی هر جایی از فرم از حالت انتخاب خارج کنید.

richTextBox1.DeselectAll();

richtextbox-control-03

نکته: وقتی که هیچ متنی انتخاب نشده، تأثیر خواص Selection مثل SelectionColor، از نقطه‌ی درج شروع می‌شود. نقطه‌ی درج، محلی چشمک زن و به شکل حرف I است که مشخص می‌کند درج متن از آنجا شروع خواهد شد. هر کاراکتر جدیدی که شما تایپ می‌کنید قالب بندی جدید بر آنها اعمال می‌شود.

اضافه کردن یک حاشیه به متن انتخاب شده

حاشیه‌ی انتخاب، یک حاشیه‌ی کوچک است که در سمت چپ کنترل RichTextBox قرار می‌گیرد. (به شکل توجه کنید)

richtextbox-control-04

حاشیه‌ی انتخاب (که با فلش مشخص شده است) برای انتخاب یک خط بکار می‌رود. برای مثال، در تصویر بالا خط سوم توسط کلیک کردن بر روی حاشیه انتخاب کناری آن انتخاب شده است. ما می‌توانیم از خاصیت SelectionMargin برای نمایش دادن حاشیه‌ی انتخاب استفاده کنیم.

اضافه کردن Scroll (نوار پیمایش)

برای اضافه کردن یک نوار پیمایش، ما از خاصیت ScrollBars که مقادیری از نوع شمارشی RichTextBoxScrollBars را قبول می‌کند استفاده می‌کنیم. این مقادیر شمارشی شامل مقادیری از جمله Horizontal (افقی) است. این مقدار زمانی که طول خط ما زیاد باشد و مقدار خاصیت WordWrap نیز False باشد به کار می‌رود. مقدار بعدی Vertical (عمودی) است، و زمانی بکار می‌رود که تعداد خطوط متن از ارتفاع RichTextBox بیشتر باشد. مقدار Both نیز در مواقع لزوم به صورت اتوماتیک Scroll های عمودی و افقی را اضافه می‌کند. وقتی مقدار خاصیت SelectionMargin برابر false باشد، شما لازم است که از مقادیر شمارشی دیگری مانند ForcedHorizontal ،ForcedVertical و یا ForcedBoth استفاده نمایید. برای غیر فعال کردن نوار پیمایش به صورت کامل کافیست که مقدار خاصیت ScrollBars را برابر None قرار دهید.

تغییر ترازبندی متن انتخاب شده

ما می‌توانیم از خاصیت SelectionAlignment برای تغییر تراز بندی (Align) متن انتخاب شده استفاده کنیم. این خاصیت مقادیری از نوع شمارشی HorizontalAlignment دریافت می‌کند که شامل Left ،Right و Center می‌باشد. مهم است که بدانید پاراگراف‌ها چگونه در داخل کنترل ساخته می‌شوند. به طور کلی، وقتی شما اولین کاراکتر خود را تایپ می‌کنید، اولین پاراگراف در RichTextBox ساخته می‌شود. برای ساختن پاراگراف بعدی، شما باید دکمه‌ی Enter را بزنید.

Redo و Undo

شما می‌توانید از خواص CanUndo و CanRedo برای اینکه کاربر بتواند عملیات انجام شده را Undo و یا Redo کند استفاده کنید. Undo کردن یعنی شما تغییراتی را که در اجزای کنترل RichTextBox به وجود آورده‌اید را برگشت دهید، در صورتیکه Redo عملیات Undo را خنثی می‌کند و تغییراتی را که شما قبلاً در اجزاء RichTextBox به وجود آورده‌اید را بر می‌گرداند.

خواص UndoActionName و RedoActionName برای محدود کردن عملیات Undo و Redo به کارهای مشخصی به کار می‌روند. این خواص عملیات‌های زیر را به صورت رشته‌ای قبول می‌کنند.

عمل توضیح
Typing عملیات تایپ
Delete عملیات حذف
DragDrop عملیات Drag & Drop
Cut عملیات برش (Cut)
Paste عملیات Paste

برای مثال وقتی که شما کلمه‌ی “Delete” را به خاصیت UndoActionName نسبت می‌دهید. اینکار باعث می‌شود که کاربر فقط بتواند عملیات حذف کردن را برگشت (Undo) دهد.

richTextBox1.UndoActionName = "Delete";

به یک دلیل نامعلوم مایکروسافت برای این خواص نوع شمارشی ایجاد نکرده است بنابراین شما باید از یک رشته برای انجام این اعمال استفاده نمایید.

شناسایی URL

کنترل RichTextBox این قابلیت را داراست که بتواند URL هایی را که در آن تایپ و یا Paste می‌شوند را تشخیص دهد. خاصیت DetectUrls به کنترل اجازه می‌دهد که URL ها را تشخیص داده و یک لینک به آن صفحه ایجاد کند. مقدار True این خاصیت را فعال و مقدار False این خاصیت را غیر فعال می‌کند. در تصویر زیر، شما یک URL را مشاهده می‌کنید که نشان دهنده‌ی یک لینک است. و زمانی که شما نشانگر ماوس را بر روی آن ببرید آیکن ماوس به شکل یک دست تغییر پیدا می‌کند.

richtextbox-control-05

کلیک کردن بر روی Link آنرا در داخل مرورگر شما باز می‌کند.

اضافه کردن بالت ها

شما می‌توانید در داخل RichTextBox گلوله‌هایی را به وجود آورید. شما می‌توانید از خاصیت SelectionBullet و قرار دادن مقدار True برای نشانه گذاری متن انتخاب شده استفاده کنید. خاصیت BulletIndent فاصله‌ی هر گلوله را با ابتدای متن مشخص می‌کند. برنامه‌ی زیر یک دکمه دارد که در ابتدای هر خط انتخاب شده یا پارگراف یا جایی که محل درج قرار گرفته است یک گلوله اضافه می‌کند.
richtextbox-control-06

فعال و غیر غیر فعال کردن کلیدهای میانبر

خاصیت ShortcutsEnabled کلیدهای میانبری را که برای Cut کردن و Paste کردن متن بکار می‌روند فعال یا غیر فعال می‌کند. وقتی که مقدار این خاصیت برابر با True باشد، کلیدهای میانبر زیر توسط RichTextBox قبول می‌شوند.

میانبر عملکرد
Ctrl + Z بازگردانی
Ctrl + E وسط چین کردن متن
Ctrl + C کپی کردن متن
Ctrl + Y برعکس Undo
Ctrl + X بریدن قسمتی از متن
Ctrl + Backspace تمامی کلماتی که در سمت چپ نشانگر ماوس قرار دارند را حذف می‌کند
Ctrl + V Paste کردن
Ctrl + Delete تمامی کلماتی را که در سمت راست نشانگر ماوس قرار دارند را حذف می‌کند.
Ctrl + A همه‌ی متن را انتخاب می‌کند.
Ctrl + L چپ چین کردن
Ctrl + R راست چین کردن

وقتی که مقدار این خاصیت را برابر با False قرار دهید تمامی این کلیدهای میانبر در داخل RichTextBox غیر فعال می‌شوند.

حفاظت از متن

شما قابلیت محافظت از قسمتی از متن را با استفاده از خاصیت SelectionProtected را دارا هستید. وقتی که مقدار این خاصیت برابر با True باشد، قسمتی از متن را که انتخاب کرده‌اید محافظت می‌شود. متنی که محافظت شده باشد را نمی‌توان دستکاری کرد. وقتی که کاربر می‌خواهد یک متن حفاظت شده را دستکاری کند، رویداد Protect اتفاق می افتد. شما می‌توانید بر روی این رویداد مانور دهید. برای مثال، می‌توانید یک پیغام را به کاربر نشان دهید مبنی بر اینکه او در تلاش برای دستکاری یک متن حفاظت شده است.

Rich Text Format (RTF)

Rich Text Format فایلی است که اطلاعات قالب (فرمت) متن شما را در خود ذخیره می‌کند. یک TextBox نمی‌تواند قالب (فرمت) متن‌ها در در خود ذخیره کند و فقط می‌تواند حاوی متن‌های ساده باشد. RichTextBox حاوی خواص Text و RTF است که خاصیت Text آن متن ساده را در خود جای می‌دهد و خاصیت RTF آن، متن و کدهای RTF ی را که برای قالب بندی آن به کار رفته است را در خود جای می‌دهد. تصویر زیر یک متن قالب بندی شده را به همراه کدهای RTF آن نشان می‌دهد.

richtextbox-control-07
کدی که متن موجود در شکل بالا را قالب بندی می‌کند به صورت زیر است :

richTextBox1.Select(0, 6);
richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Bold);
            
richTextBox1.Select(14, 11);
richTextBox1.SelectionColor = Color.Red;

richTextBox1.Select(29, 3);
richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Bold);
richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Italic);

richtextbox-control-08
و کدی که همین متن را به RTF تبدیل می‌کند به صورت زیر است :

richTextBox1.Text = richTextBox1.Rtf;

کدهای RTF به برنامه‌های دیگر (نظیر Word) اجازه می‌دهد که قالب‌ها را خوانده و به همان صورت متن قالب بندی شده را به شما نمایش دهند. SelectRTF متن انتخاب شده را به همراه کد RTF آن انتخاب می‌کند. این به شما اجازه می‌دهد که متن قالب بندی شده را به همراه قالب آن در هنگام Cut کردن و Paste کردن با هم داشته باشید.