PDA

View Full Version : چطور در richTextBox يك الگو بسازم كه اگر يك پرانتز زدم قرمز بمونه تا پرانتز را ببندم



sabz12
پنج شنبه 31 اردیبهشت 1394, 19:44 عصر
یک سوال می خواهم در یک richTextBox1_TextChanged یک کد بنویسم که تقریبا مثل کد زنی پرانتز ها و کروشه های باز را حتما ببندم این جوری فکر کردم که مثلا پرانتز باز قرمز باشه تا حتما یک پرانتز بسته براش بزنم اساتید خواهشا یاری کنید.

shahryari
پنج شنبه 31 اردیبهشت 1394, 19:57 عصر
اگه منظورت اینه که مثل ایدیتور و IDE عمل کنه ، بهتره دنبال کامپوننت باشی
http://www.codeproject.com/Articles/27744/Net-Script-Editor-C-Vb-net-Mini-IDE

RmeXXXXXXXXX
پنج شنبه 31 اردیبهشت 1394, 22:40 عصر
میتونی توی textChanged یا Leave تعداد پرانتزهای باز و پرانتزهای بسته رو بشماری (با متد Count) بعد باید تفریقشون بشه صفر وگرنه حتمن تعداشون برابر نیست. اینجوری اگر تعداد پرانتز بسته بیشتری نسبت به پرانتزهای باز بود رو هم میتونی تشخیص بدی ( حالت برعکس)

sabz12
شنبه 02 خرداد 1394, 09:55 صبح
با تشكر از اساتيد من يك كدي زدم فايلش هم گذاشتم نظرتون چيه؟؟اگر مي شد اخرين پرانتز كه تغيير مي كنه فقط رنگي ميشد بهتر بود ایا میشه وسط متن هم اگر پرانتز باز پاک بشه فقط اون رنگی بشه؟!!!:متفکر:

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;
}
}
}
public static int CountStringOccurrences(string text, string pattern) //??? ????? ???? ???
{
int count = 0;
int i = 0;
while ((i = text.IndexOf(pattern, i)) != -1)
{
i += pattern.Length;
count++;
}
{
return count;
}
}

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
string rich1 = richTextBox1.Text;



int shomare1 = CountStringOccurrences(rich1, "("); // // 1????? ??????
int shomare2 = CountStringOccurrences(rich1, ")");// // ????? ??????2
if (shomare1 - shomare2 == 0)
{
this.CheckKeyword(")", Color.Black, 0);
this.CheckKeyword("(", Color.Black, 0);
return;
}

if (shomare1 - shomare2 > 0)
{
this.CheckKeyword("(", Color.Gray, 0);// // ???? ????
}
if (shomare1 - shomare2 < 0)
{
this.CheckKeyword(")", Color.Red, 0);// // ???? ????
}
}