رنگی کردن بخشی از متن TextBox
باسلام
من می خوام زمانی که در تکست متنی رو تایپ میکنم به محض تایپ یک کلمه خاص که خودم واسش تعریف میکنم ، رنگ اون کلمه خاص تغییر کنه. مثلا اگر در تکست کلمه begin تایپ شد رنگ اون به آبی تغییر کنه و مابقی کلمات به همون رنگ مشکی باقی بمونند.
برای تشخیص اون کلمه خاص مشکلی ندارم، مشکل اینه که چطور رنگیش کنم.
با تشکر
نقل قول: رنگی کردن بخشی از متن TextBox
سلام شما باید از 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 تا مشکل کوچیک هم داره)؟
راستی چجوری اون کلمه رو پیدا می کنی؟؟؟
نقل قول: رنگی کردن بخشی از متن TextBox
وقتی کلمه ای تایپ میکنید قبل از تایپ هم توی تکست باکس متنی نوشتید یا اینکه به یک منبعی مثل اکسس یا اسکیول ارتباط داره ؟
نقل قول: رنگی کردن بخشی از متن TextBox
ضمن تشکر از دوستان
جناب معصومی ، فکر کنم بزرگترین مشکلش اینه : فقط اولین کلمه رو رنگی میکنه ، یعنی اگر چند بار for رو تایپ کنیم ، تنها اولین مورد رنگی میشه.
در مورد نحوه تشخیص کلمه هم اجازه بدین با مثال توضیح بدم ; فرضا من میخوام کلمه if رو تشخیص بدم. به محض ورود هر کاراکتر در تکست ، اون کاراکتر بررسی میشه ، چنانچه حرف f بود حرف قبلش هم بررسی میشه و اگر حرف i بود ، حالا باید رنگی بشه. البته این برای تشخیص در textbox بود.
نقل قول:
وقتی کلمه ای تایپ میکنید قبل از تایپ هم توی تکست باکس متنی نوشتید یا اینکه به یک منبعی مثل اکسس یا اسکیول ارتباط داره ؟
قبل و بعد از کلمه ممکنه متن دیگه ای هم باشه و در این مورد به بانک وصل نیست .
نقل قول: رنگی کردن بخشی از متن TextBox
سلام
آفرین درسته
راه حلشم مثه تشخیص خطا توسط کامپایلره (خواستی بیشتر برات توضیح میدم)
حالا چی شد مشکل شمامگه فقط سر رنگی کردن نبود؟پس حل شد دیگه
نقل قول: رنگی کردن بخشی از متن TextBox
راستش هنوز حل نشده:لبخندساده:
اگه بتونم همشونو رنگی کنم اون وقت حل میشه.
نقل قول: رنگی کردن بخشی از متن TextBox
سلام
دوست عزیز طبق فرمایش شما:
نقل قول:
برای تشخیص اون کلمه خاص مشکلی ندارم، مشکل اینه که چطور رنگیش کنم.
اما:
نقل قول:
اگه بتونم همشونو رنگی کنم اون وقت حل میشه.
پس مشکل شما دو تا چیزه
1- پیدا کردن همه کلمات
2- رنگی کردن
مشکل رنگی کردن که حل شد
اما برای پیدا کردن همه کلمات یک راه جالب (البته به تعداد انسان ها راه هست برای رسیدن به خدا) اینه که یک متغییر رشته ای تعریف کن هردفعه کل متن تکست باکس رو توش بریز هردفعه به جای اینکه Index = richTextBox1.Text.IndexOf(array[j]);
روی تکست باکس سرچ کنی رو متغییر سرچ کنی بعد از اتمام کار بیای اون کلمه خاص توی متغییر رو بایک کلمه دیگه هم طول خودش(!!!؟؟؟؟ چرا؟) عوض کنی حالا چی میشه؟هیچی هردفعه که سرچ می کنی اون کلمه خاص رو پیدا میکنی و رنگیش میکنی اونو به اصطلاح مارک می کنی که دفعه بعد اصلا پیدا نشه
حالا شباهتش رو می گم با تشخیص خطا در فازهای کامپایل توی فرآیند کامپایل میاد برای پیدا کردن همه خطاها از یه همچین روشی استفاده می کنه چون اگه از این راه استفاده نکنه وقتی به اولین خطا رسید عملیات متوقف می شود و خطاهای دیگه رو پیدا نمی کنه (و یا امکان داره خطایی که در بالا پیدا کرده مرتفع بشه)
کدشو خودت بنویس
ایشالا موفق باشی
نقل قول: رنگی کردن بخشی از متن TextBox
سلام
یه راه بهتر
شما می تونید توی ایونت 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;
}
}