PDA

View Full Version : سوال: تشخیص و رنگ کردن متن RichTextBox در سی شارپ



kazem forghani
شنبه 25 مهر 1394, 14:54 عصر
سلام
توی سی شارپ دیدید که اگر کلمه if رو وارد کنید یه رنگ می شه و اگر یه متن رو داخل دابل کتیشن قرار بدیم یه رنگ دیگه می شه! مثل نمونه زیر
private String a

می خواستم بینم آیا این امکان در RichTextBox وجود داره؟؟؟ اگر آره چطوری؟؟؟
خیلی ممنون

pbm_soy
شنبه 25 مهر 1394, 18:28 عصر
شما با انتخاب یک بخش از متن آن میتوانید به آن ناحیه رنگ بدید
خصوصیات زیر بکارت میاد
Selection start
Selection end
ابتدا و انتهای ناحیه از متن برای انتخاب کردن آن بخش و یا اینکه اگر کاربر متنی را انتخاب کند به شما محل شروع و انتهای آنرا میدهد
Selection color به ناحیه امنتخاب شده رنگ میدهد و یا رنگ آن ناحیه را به شما میدهد
پس از هر فاصله زدن کاربر کلمه تایپ شده را بگیر و بررسی کن اگر if باشد آنرا انتخاب کن و رنگ بهش بده !

یونس ابراهیمی
یک شنبه 26 مهر 1394, 21:05 عصر
سلام، اینم یه آموزش از سایت w3-farsi.com (http://www.w3-farsi.com) خدمت دوستان عزیز


کنترل RichTextBox شبیه کنترل TextBox است با این تفاوت که این کنترل به شما اجازه می دهد که قالب قسمت های مختلف متن آنرا تغییر دهید. کنترل Text Box به طور کلی برای پذیرفتن اطلاعات ورودی از کاربر بکار می رود ، در صورتیکه کنترل RichTextBox برای نمایش دادن متن های قالب بندی شده و ذخیره ی آن در قالب Rich Text Format (RTF) به کار می رود.
http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-01.jpg
در تصویر بالا شما تفاوت بین TextBox (بالا) و RichTextBox (پایین) را مشاهده می کنید. اگرچه شما می توانید یک Text Box را قالب بندی کنید ولی این قالب بندی به کل متن آن اعمال می شود. کنترل 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); http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-02.jpg
مقدار اول، نقطه ی شروع انتخاب و مقدار دوم تعداد کاراکترهایی را که باید از نقطه ی شروع انتخاب شوند را مشخص می کند. وقتی ما یک متن را انتخاب می کنیم، می توانیم متن انتخاب شده را به وسیله ی تعداد زیادی از خواص که بر روی متن انتخاب شده کار می کنند قالب بندی کنیم.
برای مثال،شما می توانید برای تغییر رنگ متن انتخاب شده از خاصیت SelectionColor استفاده کنید.همچنین می توانید برای تغییر رنگ پس زمینه ی آن از خاصیت SelectionBackColor استفاده کنید.

richTextBox1.SelectionColor = Color.Red;

richTextBox1.SelectionBackColor = Color.Yellow;
شما با استفاده از متد DeselectAll می توانید متن انتخاب شده را با کلیک بر روی هر جایی از فرم از حالت انتخاب خارج کنید.

richTextBox1.DeselectAll(); http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-03.jpg
نکته: وقتی که هیچ متنی انتخاب نشده ، تاثیر خواص Selection مثل SelectionColor ، از نقطه ی درج شروع می شود. نقطه ی درج ،محلی چشمک زن و به شکل حرف I است که مشخص می کند درج متن از آنجا شروع خواهد شد.هر کاراکتر جدیدی که شما تایپ می کنید قالب بندی جدید بر آنها اعمال می شود.

اضافه کردن یک حاشیه به متن انتخاب شده حاشیه ی انتخاب، یک حاشیه ی کوچک است که در سمت چپ کنترل RichTextBox قرار می گیرد.(به شکل توجه کنید)
http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-04.jpg
حاشیه ی انتخاب (که با فلش مشخص شده است) برای انتخاب یک خط بکار می رود. برای مثال ، در تصویر بالا خط سوم توسط کلیک کردن بر روی حاشیه انتخاب کناری آن انتخاب شده است. ما می توانیم از خاصیت 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 را مشاهده می کنید که نشان دهنده ی یک لینک است.و زمانی که شما نشانگر موس را بر روی آن ببرید آیکن موس به شکل یک دست تغییر پیدا می کند.
http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-05.jpg
کلیک کردن بر روی Link آنرا در داخل مرورگر شما باز می کند.

اضافه کردن بالت ها شما می توانید در داخل RichTextBox گلوله هایی را به وجود آورید. شما می توانید از خاصیت SelectionBullet و قرار دادن مقدار True برای نشانه گذاری متن انتخاب شده استفاده کنید. خاصیت BulletIndent فاصله ی هر گلوله را با ابتدای متن مشخص می کند. برنامه ی زیر یک دکمه دارد که در ابتدای هر خط انتخاب شده یا پارگراف یا جایی که محل درج قرار گرفته است یک گلوله اضافه می کند.
http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-06.jpg

فعال و غیر غیر فعال کردن کلیدهای میانبر خاصیت 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 آن نشان می دهد.
http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-07.jpg
کدی که متن موجود در شکل بالا را قالب بندی می کند به صورت زیر است :

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); http://www.w3-farsi.com/wp-content/uploads/2013/09/richtextbox-control-08.jpg
و کدی که همین متن را به RTF تبدیل می کند به صورت زیر است :

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

kazem forghani
دوشنبه 27 مهر 1394, 12:57 عصر
سلام
سپاس از دوستانی که به این تاپیک پاسخ دادن.
من می خوام در متن کل RichTextBox جستجو کنه و هر کلمه ای که مثلا if بود رو آبی کنه.

kazem forghani
چهارشنبه 29 مهر 1394, 06:11 صبح
سوال من پاسخ داده نشد...

یونس ابراهیمی
چهارشنبه 29 مهر 1394, 07:04 صبح
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
this.CheckKeyword("private", Color.Purple, 0);
this.CheckKeyword("string", Color.Green, 0);
}



private void CheckKeyword(string word, Color color, int startIndex)
{
if (this.richTextBox1.Text.Contains(word))
{
int index = -1;
int selectStart = this.richTextBox1.SelectionStart;

while ((index = this.richTextBox1.Text.IndexOf(word, (index + 1))) != -1)
{
this.richTextBox1.Select((index + startIndex), word.Length);
this.richTextBox1.SelectionColor = color;
this.richTextBox1.Select(selectStart, 0);
this.richTextBox1.SelectionColor = Color.Black;
}
}
}

kazem forghani
جمعه 01 آبان 1394, 06:52 صبح
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
this.CheckKeyword("private", Color.Purple, 0);
this.CheckKeyword("string", Color.Green, 0);
}



private void CheckKeyword(string word, Color color, int startIndex)
{
if (this.richTextBox1.Text.Contains(word))
{
int index = -1;
int selectStart = this.richTextBox1.SelectionStart;

while ((index = this.richTextBox1.Text.IndexOf(word, (index + 1))) != -1)
{
this.richTextBox1.Select((index + startIndex), word.Length);
this.richTextBox1.SelectionColor = color;
this.richTextBox1.Select(selectStart, 0);
this.richTextBox1.SelectionColor = Color.Black;
}
}
}


اگر اسپم محسوب می شه خیلی ببخشید...
از شما تشکر فراوان می کنم مشکلم حل شد