PDA

View Full Version : جستجی یک richTextBox همانند Find NotePad



Arezoo62
سه شنبه 30 خرداد 1391, 15:08 عصر
دوستان اگه find نت پد و دیده باشید هر چند بار روی دکمه فیند کلیک کنید به ترتیب لغات پیدا شده رو بهتون نشون میده
من با این کد این کار و می کنم اما مشکل اینجاست فقط یکبار این کار و میکنه
string a = txtSearch.Text;
richTextBox1.Focus();
richTextBox1.Find(a, RichTextBoxFinds.WholeWord);

alonemm
سه شنبه 30 خرداد 1391, 15:49 عصر
باسلام:

میتونید موقعیت اولین کلمه جستجو شده که در متن کنترل richTextBox وجود دارد رو نگه داری کنید و سپس از اینجا به بعد رو جستجو کنید.

به عنوان مثال:


publicint FindMyText(string txtToSearch, int searchStart, int searchEnd)
{
// Unselect the previously searched string
if (searchStart > 0 && searchEnd > 0 && indexOfSearchText >= 0)
{
rtb.Undo();
}

// Set the return value to -1 by default.
int retVal = -1;

// A valid starting index should be specified.
// if indexOfSearchText = -1, the end of search
if (searchStart >= 0 && indexOfSearchText >=0)
{
// A valid ending index
if (searchEnd > searchStart || searchEnd == -1)
{
// Find the position of search string in RichTextBox
indexOfSearchText = rtb.Find(txtToSearch, searchStart, searchEnd, RichTextBoxFinds.None);
// Determine whether the text was found in richTextBox1.
if (indexOfSearchText != -1)
{
// Return the index to the specified search text.
retVal = indexOfSearchText;
}
}
}
return retVal;
}



// Reset the richtextbox when user changes the search string
privatevoid textBox1_TextChanged(object sender, EventArgs e)
{
start = 0;
indexOfSearchText = 0;
}

Arezoo62
سه شنبه 30 خرداد 1391, 16:01 عصر
اما من کدهات و نمیفهمم
نه می دونم richtextbox کدومه و نه ...

harani
سه شنبه 30 خرداد 1391, 16:43 عصر
کجاشو متوجه نمیشین کنترل richbox شما rtb هستش .

alonemm
سه شنبه 30 خرداد 1391, 16:59 عصر
باسلام:

به درخواست شما کد ساده تری براتون نوشتم:
در این کد شما هر بار که دکمه جستجو رو بزنید کلمه مورد نظر اگر یافت بشه BackColor به رنگ زرد تغییر میکنه و دوباره که میزنید سعی به پیدا کردن کلمه بعدی میکنه.

int laststop = 0;
private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
richTextBox1.SelectionBackColor = Color.White;
int check = 0;
if (check == -1)
{
laststop = 0;
}
check = richTextBox1.Find(textBox1.Text, laststop, RichTextBoxFinds.None);
richTextBox1.SelectionBackColor = Color.Yellow;
if (check ==-1)
{
MessageBox.Show("Search is completed.");
laststop = 0;
}
else
{
laststop = laststop + textBox1.Text.Length;
}

}



موفق باشید.

Arezoo62
سه شنبه 30 خرداد 1391, 17:17 عصر
ازتون بسیار ممنونم
اما این همه ی لغات پیدا نمیکنه و فقط یک لغت و نشون میده

Hybrid
سه شنبه 30 خرداد 1391, 21:30 عصر
سلام ، یک نمونه واستون نوشتم ( کدش رو هم ساده نوشتم) البته به زبان vb.net !

میتونین تبدیل کنید ( ببخشید سی شارپ نصب ندارم وگرنه با سی شارپ واستون مینوشتم)

سوالی در مورد سورس داشتین در خدمتم.

Arezoo62
سه شنبه 30 خرداد 1391, 23:29 عصر
سلام ، یک نمونه واستون نوشتم ( کدش رو هم ساده نوشتم) البته به زبان vb.net !

میتونین تبدیل کنید ( ببخشید سی شارپ نصب ندارم وگرنه با سی شارپ واستون مینوشتم)

سوالی در مورد سورس داشتین در خدمتم.

تو حالت Find تونستم تبدیلش کنم به سی شارپ و مشکلم حل شد
اما تو حالت Find Next هر کار کردم نتونستم به سی شارپ تبدیلش کنم

اگه بشه فقط حالت Find Next رو کد سی شارپش و بدید (بدون بررسی checkbox ممنون میشم)

uniqueboy_ara
چهارشنبه 31 خرداد 1391, 00:34 صبح
شما از این کد استفاده کن، مثل هلو کار می کنه ( همون کدیه که دوستمون نوشته بود، با یه سری تفاوت جزئی ) :)
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.SelectionBackColor = Color.White;
int check = 0;
if (check == -1)
{
laststop = 0;
}
check = richTextBox1.Find(textBox1.Text, laststop, RichTextBoxFinds.None);
richTextBox1.SelectionBackColor = Color.Yellow;
if (check == -1)
{
MessageBox.Show("Search is completed.");
//--------------
richTextBox1.SelectAll();
richTextBox1.SelectionBackColor = Color.White;
//-------------
laststop = 0;
}
else
{
//laststop = laststop + textBox1.Text.Length;
laststop = richTextBox1.SelectionStart + textBox1.Text.Length;

}
}

harani
چهارشنبه 31 خرداد 1391, 22:21 عصر
من کد یر رو نوشتم ولی یه ایرادی که داره باید دفعات زیادی دکمه مربوطه را فشار دهیم تا به مورد جستجوی بعدی برسیم اگه بازم توانستید ایراد کد را بیابید .



public int counterNext ;
private void toolStripbtnFindNext_Click(object sender, EventArgs e)
{
counterNext++;

try
{

int a = rtbPaper.Text.IndexOf(toolStripTxtFind.Text);
a += counterNext;

int i = rtbPaper.Text.IndexOf(toolStripTxtFind.Text, a);

rtbPaper.Select(i, toolStripTxtFind.Text.Length);
rtbPaper.Focus();
rtbPaper.ScrollToCaret();
}
catch (System.Exception)
{
MessageBox.Show("دیگه موردی یافت نمیشه", "خطای جستجو", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}

}

harani
چهارشنبه 31 خرداد 1391, 22:23 عصر
من کد زیر رو نوشتم ولی یه ایرادی که داره باید دفعات زیادی دکمه مربوطه را فشار دهیم تا به مورد جستجوی بعدی برسیم اگه بازم توانستید ایراد کد را بیابید و اصلاح کنید . خیلی به جواب نزدیک است .


public int counterNext ;
private void btnFindNext_Click(object sender, EventArgs e)
{
counterNext++;

try
{

int a = richTextBox1.Text.IndexOf(textBoxFind.Text);
a += counterNext;

int i =richTextBox1.Text.IndexOf(textBoxFind.Text, a);

richTextBox1.Select(i, textBoxFind.Text.Length);
richTextBox1.Focus();
richTextBox1.ScrollToCaret();
}
catch (System.Exception)
{
MessageBox.Show(" خطای جستجو", "دیگه موردی یافت نمیشه", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}

}



با سپاس فروان از شما