PDA

View Full Version : رنگی کردن بخشی از متن TextBox



unique1984
شنبه 23 آبان 1388, 22:13 عصر
باسلام
من می خوام زمانی که در تکست متنی رو تایپ میکنم به محض تایپ یک کلمه خاص که خودم واسش تعریف میکنم ، رنگ اون کلمه خاص تغییر کنه. مثلا اگر در تکست کلمه begin تایپ شد رنگ اون به آبی تغییر کنه و مابقی کلمات به همون رنگ مشکی باقی بمونند.
برای تشخیص اون کلمه خاص مشکلی ندارم، مشکل اینه که چطور رنگیش کنم.
با تشکر

Saeed.Masoumi
شنبه 23 آبان 1388, 23:28 عصر
سلام شما باید از RichTextBox استفاده کنی
بعد توی ایونت TextChanged این کد رو بنویس:



private string[] DB = {"Begin","End","for","if"};
private string New = null;
private int Index=0;
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
New = richTextBox1.Text;
string[] array = New.Split(' ');
for (int j = 0; j < array.Length; j++)
{
if (DB.Contains(array[j]))
{
Index = richTextBox1.Text.IndexOf(array[j]);
richTextBox1.Select(Index, array[j].Length);
richTextBox1.SelectionColor = Color.Red;
richTextBox1.Select(richTextBox1.Text.Length, 0);
richTextBox1.SelectionColor = Color.Black;
array[j] = null;
}
}
}

این کد یک مشکل بزرگ داره اگه گفتی چیه(البته یک 3 4 تا مشکل کوچیک هم داره)؟

راستی چجوری اون کلمه رو پیدا می کنی؟؟؟

ali_md110
شنبه 23 آبان 1388, 23:31 عصر
وقتی کلمه ای تایپ میکنید قبل از تایپ هم توی تکست باکس متنی نوشتید یا اینکه به یک منبعی مثل اکسس یا اسکیول ارتباط داره ؟

unique1984
یک شنبه 24 آبان 1388, 16:44 عصر
ضمن تشکر از دوستان
جناب معصومی ، فکر کنم بزرگترین مشکلش اینه : فقط اولین کلمه رو رنگی میکنه ، یعنی اگر چند بار for رو تایپ کنیم ، تنها اولین مورد رنگی میشه.
در مورد نحوه تشخیص کلمه هم اجازه بدین با مثال توضیح بدم ; فرضا من میخوام کلمه if رو تشخیص بدم. به محض ورود هر کاراکتر در تکست ، اون کاراکتر بررسی میشه ، چنانچه حرف f بود حرف قبلش هم بررسی میشه و اگر حرف i بود ، حالا باید رنگی بشه. البته این برای تشخیص در textbox بود.

وقتی کلمه ای تایپ میکنید قبل از تایپ هم توی تکست باکس متنی نوشتید یا اینکه به یک منبعی مثل اکسس یا اسکیول ارتباط داره ؟
قبل و بعد از کلمه ممکنه متن دیگه ای هم باشه و در این مورد به بانک وصل نیست .

Saeed.Masoumi
یک شنبه 24 آبان 1388, 22:59 عصر
سلام
آفرین درسته
راه حلشم مثه تشخیص خطا توسط کامپایلره (خواستی بیشتر برات توضیح میدم)
حالا چی شد مشکل شمامگه فقط سر رنگی کردن نبود؟پس حل شد دیگه

unique1984
دوشنبه 25 آبان 1388, 14:51 عصر
راستش هنوز حل نشده:لبخندساده:
اگه بتونم همشونو رنگی کنم اون وقت حل میشه.

Saeed.Masoumi
دوشنبه 25 آبان 1388, 17:17 عصر
سلام
دوست عزیز طبق فرمایش شما:

برای تشخیص اون کلمه خاص مشکلی ندارم، مشکل اینه که چطور رنگیش کنم.اما:

اگه بتونم همشونو رنگی کنم اون وقت حل میشه. پس مشکل شما دو تا چیزه
1- پیدا کردن همه کلمات
2- رنگی کردن
مشکل رنگی کردن که حل شد
اما برای پیدا کردن همه کلمات یک راه جالب (البته به تعداد انسان ها راه هست برای رسیدن به خدا) اینه که یک متغییر رشته ای تعریف کن هردفعه کل متن تکست باکس رو توش بریز هردفعه به جای اینکه
Index = richTextBox1.Text.IndexOf(array[j]); روی تکست باکس سرچ کنی رو متغییر سرچ کنی بعد از اتمام کار بیای اون کلمه خاص توی متغییر رو بایک کلمه دیگه هم طول خودش(!!!؟؟؟؟ چرا؟) عوض کنی حالا چی میشه؟هیچی هردفعه که سرچ می کنی اون کلمه خاص رو پیدا میکنی و رنگیش میکنی اونو به اصطلاح مارک می کنی که دفعه بعد اصلا پیدا نشه
حالا شباهتش رو می گم با تشخیص خطا در فازهای کامپایل توی فرآیند کامپایل میاد برای پیدا کردن همه خطاها از یه همچین روشی استفاده می کنه چون اگه از این راه استفاده نکنه وقتی به اولین خطا رسید عملیات متوقف می شود و خطاهای دیگه رو پیدا نمی کنه (و یا امکان داره خطایی که در بالا پیدا کرده مرتفع بشه)
کدشو خودت بنویس
ایشالا موفق باشی

nooriyeh
یک شنبه 29 آذر 1388, 18:41 عصر
سلام
یه راه بهتر
شما می تونید توی ایونت richtextbox از یه حلقه for استفاده کنید و هر کلمه ای را که می خواهید جستجو کند و اون را به رنگ دلخواهتان نشون بده
private void tb3_richtxb_TextChanged(object sender, EventArgs e)
{

for ( int i = 0; i < tb3_richtxb.Text.Length;i++ )
{
tb3_richtxb.Find("if", i, RichTextBoxFinds.WholeWord);
tb3_richtxb.SelectionColor = Color.Red;
tb3_richtxb.DeselectAll();
tb3_richtxb.Find("else", i, RichTextBoxFinds.WholeWord);
tb3_richtxb.SelectionColor = Color.Blue;
tb3_richtxb.DeselectAll();
tb3_richtxb.SelectionColor = Color.White;
}

}