PDA

View Full Version : جستجو در تکست باکس



sobaisobai
پنج شنبه 19 آبان 1390, 22:53 عصر
سلام
میخوام یه متنی رو تو یه تکست باکس سرچ کنم ببینم وجود داره یا نه؟اگه وجود داشت متن جستجو شده به حالت انتخاب دربیاد
تو تالار گشتم چیزی نبود
اگه کسی بلده کمک کنه
ممنون

wolf_majid
پنج شنبه 19 آبان 1390, 23:33 عصر
تابعی برای پیداکردن اندیش شروع یک رشته در رشته دیگه پیدا نکردم
برای همین یک تابع بد برات نوشتم :اشتباه:
امیدوارم کارت را راه بندازه
private int Search(string strSource,string str)
{
int find = -1;
int count = 0;
if (str.Length > strSource.Length)
return -1;
for (int i = 0; i < strSource.Length; i++)
{
if (count == str.Length)
break;
if (strSource[i] == str[count])
{
if (count++ == 0)
find = i;
}
else
{
count = 0;
}
}
return find;
}

private void button3_Click(object sender, EventArgs e)
{
string str = "test";
if (textBox1.Text.Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text,str ), str.Length);
}

}

sobaisobai
پنج شنبه 19 آبان 1390, 23:44 عصر
Thank Wolf_majid (http://barnamenevis.org/member.php?85916-wolf_majid)

sobaisobai
پنج شنبه 19 آبان 1390, 23:47 عصر
حالا اگه مثلا کلمه مورد نظر ما چندتا بود چی؟
بذار واضح تر بگم
میخوام تو تکست باکس سرچ کنم کلمه علی رو بعد هر چی علی پیدا شد اون هline هایی رو که کلمه علی توشون هست رو بدست بیارم
ممنون

wolf_majid
پنج شنبه 19 آبان 1390, 23:56 عصر
در مورد textBox که نمی شه چند عبارت را select کرد
اما فکر کنم با reachTextBox بشه که من تا حالا باهاش کار نکردم :لبخند:

mmd2009
جمعه 20 آبان 1390, 00:03 صبح
با سلام.

متدی که نوشتی برای اینکه بتونی چندتا مثلا test داخلش بود رو جستجو بکنه کافی بود به این صورت تغییرش بدی که مشکل حل بشه. البته این جالت Find داره. نمیدونم منظورتون این بود یا نه.


private int _find;

private void Button1Click(object sender, EventArgs e)
{
const string str = "test";
if (!textBox1.Text.Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;
}

}

private int Search(string strSource, string str)
{
int find = -1;
int count = 0;
if (str.Length > strSource.Length)
return -1;
for (int i = _find; i < strSource.Length; i++)
{
if (count == str.Length)
break;
if (strSource[i] == str[count])
{
if (count++ == 0)
find = i;
}
else
{
count = 0;
}
}
_find = find;
return find;
}


موفق باشید

sobaisobai
جمعه 20 آبان 1390, 00:14 صبح
با سلام.

متدی که نوشتی برای اینکه بتونی چندتا مثلا test داخلش بود رو جستجو بکنه کافی بود به این صورت تغییرش بدی که مشکل حل بشه. البته این جالت Find داره. نمیدونم منظورتون این بود یا نه.


private int _find;

private void Button1Click(object sender, EventArgs e)
{
const string str = "test";
if (!textBox1.Text.Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;
}

}

private int Search(string strSource, string str)
{
int find = -1;
int count = 0;
if (str.Length > strSource.Length)
return -1;
for (int i = _find; i < strSource.Length; i++)
{
if (count == str.Length)
break;
if (strSource[i] == str[count])
{
if (count++ == 0)
find = i;
}
else
{
count = 0;
}
}
_find = find;
return find;
}


موفق باشید
سلام
دوست عزیز کد شما کل متن رو انتخاب میکنه
مثل SelectAll()

sobaisobai
جمعه 20 آبان 1390, 00:18 صبح
! رو برداشتم درست شد
ولی یه ارور میگیره وقتی اخرین کلمه رو پیدا میکنه اگه بعدش دوباره باتن رو کلیک کنیم ارور میده
میشه کاری بکنیم که ارور نده

mmd2009
جمعه 20 آبان 1390, 00:21 صبح
مطمئنی؟!

دوبار تستش کردم و یک رشته طولانی دادم که 5 تا test داخلش بود و هر 5 تا رو بعد از هر 5 بار کلیک که روی دکمه زدم select کرد. کد رو یک بار دیگه Copy کنید چون مطمئنم درسته.

===========

درسته علامت مخالف رو برداری درست میشه که من به اشتباه موقع کپی اضافش کردم البته خودمم یادم نمیاد چرا اضافه شده. :لبخند:

sobaisobai
جمعه 20 آبان 1390, 00:23 صبح
هر 5 تا رو سلکت میکنه اما برای بار ششم ارور میده
ارور
InvalidArgument=Value of '-1' is not valid for 'start'.
Parameter name: start

wolf_majid
جمعه 20 آبان 1390, 00:29 صبح
به صورت زیر ویرایشش کن
private int _find=0;

private void button1_Click(object sender, EventArgs e)
{
const string str = "test";
if (textBox1.Text.Substring(_find).Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;
}

}

باگ داره
با ورودی زیر خطا پیدا می کنه

testtesttessttest

sobaisobai
جمعه 20 آبان 1390, 00:37 صبح
ممنون درست شد
یه سوال دیگه:خجالت:
حالا چه جوری از رو شماره line سلکت شده متن کل line رو بدست بیارم؟
تشکر

sobaisobai
جمعه 20 آبان 1390, 00:41 صبح
به صورت زیر ویرایشش کن
private int _find=0;

private void button1_Click(object sender, EventArgs e)
{
const string str = "test";
if (textBox1.Text.Substring(_find).Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;
}

}

باگ داره
با ورودی زیر خطا پیدا می کنه

testtesttessttest
بازم مشکل داره
حالا اگه یه متن دیگه ای رو بخواهیم از اول سرچ کنیم دیگه پیدا نمیکنه فقط همون test قبلی میمونه

wolf_majid
جمعه 20 آبان 1390, 01:04 صبح
با این تست کنید
امیدوارم دیگه باگ نداشته باشه
private int _find=0;

private void button1_Click(object sender, EventArgs e)
{
const string str = "test";
if (textBox1.Text.Substring(_find).Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;
}

}

private int Search(string strSource, string str)
{
int find = -1;
int count = 0;
if (str.Length > strSource.Length)
return -1;
for (int i = _find; i < strSource.Length; i++)
{
if (count == str.Length)
break;

if (strSource[i] != str[count])
count = 0;
if (strSource[i] == str[count])
{
if (count++ == 0)
find = i;
}
}

_find = find;
return find;

}

private void textBox1_TextChanged(object sender, EventArgs e)
{
_find = 0;
}

wolf_majid
جمعه 20 آبان 1390, 01:09 صبح
فعلا" دیگه انگار باگ نداره
به جز اینکه فقط یکبار سلکت می کنه (اون هم فکر نمی کنم زیاد مهم باشه :خجالت:)

sobaisobai
جمعه 20 آبان 1390, 01:10 صبح
چرا از متد Split استفاده نمی کنی؟
سلام
چه جوری؟

sobaisobai
جمعه 20 آبان 1390, 01:12 صبح
فعلا" دیگه انگار باگ نداره
به جز اینکه فقط یکبار سلکت می کنه (اون هم فکر نمی کنم زیاد مهم باشه :خجالت:)
درست شد اونم با تغییر back color درست کرم(البته با RichTextBox)
ممنون

mmd2009
جمعه 20 آبان 1390, 01:28 صبح
شرط رو به این صورت تغییر بدید به دیگه چندبار هم Select میکنه و فقط یک دور نمیزنه :


const string str = "test";



if (textBox1.Text.Substring(_find).Contains(str))
{

textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;

}
if ((_find + str.Length) >= textBox1.Text.Length)
{
_find = 0;

}


تست کنید ببینید باگ داره یا نه من باگی ندیدم

sobaisobai
جمعه 20 آبان 1390, 01:41 صبح
شرط رو به این صورت تغییر بدید به دیگه چندبار هم Select میکنه و فقط یک دور نمیزنه :

const string str = "test";
if (textBox1.Text.Substring(_find).Contains(str))
{

textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;

}
if ((_find + str.Length) >= textBox1.Text.Length)
{
_find = 0;

}


تست کنید ببینید باگ داره یا نه من باگی ندیدم
من متن ورودی رو از یه تکس باکس دیگه میخونم.حالا اگه متن مورد جستجو من عوض دیگه جستجو رو انجام نمیده
کد دوستمون wolf_Majid مشکل نداشت
مشکل حل شد ممنون از همه

sobaisobai
جمعه 20 آبان 1390, 01:46 صبح
ممنون درست شد
یه سوال دیگه:خجالت:
حالا چه جوری از رو شماره line سلکت شده متن کل line رو بدست بیارم؟
تشکر
کسی این سوال رو بلد نبود؟

mmd2009
جمعه 20 آبان 1390, 02:03 صبح
به هر حال اگر از یک تکست باکس دیگه هم بخونی مشکل حل شدنی بود. کافی بود کد رو به این صورت تغییر بدی. الان کد زیر دیگه فکر نکنم کلا مشکلی داشته باشه و متن رو از یک تکست باکس دیگه میخونه. البته من یخورده کدهارو


using System;
using System.Windows.Forms;

namespace WindowsFormsApplication37
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private int _find = 0;

private void button1_Click(object sender, EventArgs e)
{
string str = txtSearch.Text;

if ((_find + str.Length) > textBox1.Text.Length)
{
_find = 0;

}
if (textBox1.Text.Substring(_find).Contains(str))
{
textBox1.Focus();
textBox1.Select(Search(textBox1.Text, str), str.Length);

_find += str.Length;
}


}

private int Search(string strSource, string str)
{
int find = -1;
int count = 0;
if (str.Length > strSource.Length)
return -1;
for (int i = _find; i < strSource.Length; i++)
{
if (count == str.Length)
break;

if (strSource[i] != str[count])
count = 0;
if (strSource[i] != str[count]) continue;
if (count++ != 0) continue;
find = i;
}

_find = find;
return find;

}

private void txtSearch_TextChanged(object sender, EventArgs e)
{
_find = 0;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
_find = 0;
}
}
}



به هر حال هدف من و دوست خوبمون wolf_Majid حل مشکل شما بود که خدارو شکر حل شد.

موفق باشید.

mmd2009
جمعه 20 آبان 1390, 02:06 صبح
کسی این سوال رو بلد نبود؟

دوست عزیز نیازی به بلد بودن نداره که کافیه روش یه خورده فکر کنی مطمئنم خودتم میتونی بنویسیش.

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

منظورت اینه فرضا یک شماره خط برنامه بگیره بعدش تکس باکس کل اون خط رو highlight بکنه ؟

sobaisobai
جمعه 20 آبان 1390, 02:26 صبح
بله
فقط شماره خط هایی رو میخوام که کلمه سرچ شده توشون باشه
من با کد زیر تقریبا انجام دادن
for (int i = 0; i < richTextBox1.TextLength; i++)
{
richTextBox2.Text += richTextBox1.Lines.GetValue(i).ToString() + Environment.NewLine;
}
به نظر شما باگ نداره

سوداگر
جمعه 20 آبان 1390, 02:34 صبح
کسی این سوال رو بلد نبود؟


int counter = 1;
foreach (string str in richTextBox1.Text.Split('\n'))
{

if(counter++ ==LineNumber)
MessageBox.Show(str);
}


این طرز کار Split بود که گفتم. حالا اگه خواستی بجای نمایش دادن، اون رو HighLight کن.

mmd2009
جمعه 20 آبان 1390, 02:43 صبح
این چیزی که شما نوشتی برای richTextBox و راستش من اجراش کردم ارور داد که اندیکس خارج از محدوده هست. ولی کدی که من نوشتم رو بذارید تو همون کدی که قبلا بهتون دادم کافیه بذاریدش تو یک دکمه و روش کلیک کنید بعدش شماره خط هایی که اون متن داخلش بوده رو بهتون نشون میده البته با یک روش ساده


var listLineText = new List<string>(textBox1.Text.Split('\n'));

for (var i = 0; i < listLineText.Count; i++)
{
if (listLineText[i].Contains(txtSearch.Text.Trim()))
{
MessageBox.Show(string.Format("Line :{0}", (i + 1)));
}
}

سوداگر
جمعه 20 آبان 1390, 02:58 صبح
این کجاش ارور میده؟؟؟؟

mmd2009
جمعه 20 آبان 1390, 03:01 صبح
روی سخن من با شما نبود.

sobaisobai
جمعه 20 آبان 1390, 16:00 عصر
سلام
یه مشکل دیگه واسم پیش اومد
من تو فایل text که میخونم متن زیر رو دارم

1
محمد
علی
2
حسن
3
امین
حالا من علی رو سرچ میکنم میخوام وقتی کلمه علی پیدا شد اولین line ی که قبل از علی شامل عدد باشه رو بدست بیارم
ممنون

sobaisobai
جمعه 20 آبان 1390, 16:52 عصر
دوستان اگه کسی بلده راهنمایی کنه

wolf_majid
جمعه 20 آبان 1390, 17:35 عصر
سلام
یه مشکل دیگه واسم پیش اومد
من تو فایل text که میخونم متن زیر رو دارم

1
محمد
علی
2
حسن
3
امین
حالا من علی رو سرچ میکنم میخوام وقتی کلمه علی پیدا شد اولین line ی که قبل از علی شامل عدد باشه رو بدست بیارم
ممنون

1- یک متغیر boolean نیاز داری
2- یک حلقه for می خواهیم از سطری که علی توش پیدا شده تا سطر اول
3- یک حلقه for داخلی می خواهیم از 0 نا line.lenght-1
4- اگر کاراکتر مورد نظر اون line عدد نبود متغیر bool را false کن و break
5- در حلقه اول اگر متغیر bool برابر true بود شماره سطر رو برگردون

شرمنده که کد ننوشتم :خجالت:

sobaisobai
جمعه 20 آبان 1390, 17:39 عصر
1-که مشکلی نیست
2-یعنی از سطر مثلا 3 -- بشه تا برسه به سطر اول؟
3-مشکلی نیست
4-چه جوری بفهمم عدد هست یا نه؟
5-مشکلی نیست
ممنون اگه بیشتر توضیح بدی حله

wolf_majid
جمعه 20 آبان 1390, 17:42 عصر
1-که مشکلی نیست
2-یعنی از سطر مثلا 3 -- بشه تا برسه به سطر اول؟
3-مشکلی نیست
4-چه جوری بفهمم عدد هست یا نه؟
5-مشکلی نیست
ممنون اگه بیشتر توضیح بدی حله

2- بله
4-
; char.isnumber(str[i])

آخ ببخشید یادم رفت بگم مقدار اولیه متغیر bool برابر true است
در ضمن حلقه for اول از سطر قبلی علی در صورتی که وجود داشته باشه شروع میشه تا سطر اول

sobaisobai
جمعه 20 آبان 1390, 17:55 عصر
- یک حلقه for داخلی می خواهیم از 0 نا line.lenght-1
داخل ( 2- یک حلقه for می خواهیم از سطری که علی توش پیدا شده تا سطر اول ) قرار بدم؟

wolf_majid
جمعه 20 آبان 1390, 17:58 عصر
بله
فقط for اول از سطر قبلی علی در صورتی که وجود داشته باشه شروع می شه تا سطر 1 (

sobaisobai
جمعه 20 آبان 1390, 18:13 عصر
اقا نفهمیدم!!!!!!
من با کد زیر مقدار سرچ شده رو با استفاده از شماره line بدست میارم
var listLineText = new List<string>(richTextBox1.Text.Split('\n'));
for (var i = 0; i < listLineText.Count; i++)
{
if (listLineText[i].Contains(textBox2.Text.Trim()))
{
int counter = 1;
foreach (string str1 in richTextBox1.Text.Split('\n'))
{
if (counter++ == (i + 1))
{
richTextBox2.Text += str1 + Environment.NewLine;
}
}
}
}
اون دوتا حلقه رو که گفتید کجا بذارم؟

wolf_majid
جمعه 20 آبان 1390, 18:15 عصر
به صورت زیر براتون نوشتم
تبدیلش با خودتون

//شماره اولین سطر در صورت شامل عدد بودن قبل از سطر علی
int rowNum = -1;
bool bln = true;
string []str = textBox1.Text.Trim().Split('\n');
if (str.Length > 1)
//در صورتیکه سطر اول یک و سطر قبل از علی 3 باشه
for (int i = 3; i >= 1; i--)
{
for (int j = 0; j < str.Length; j++)
{
if (!char.IsNumber(str[i][j]))
{
bln = false;
break;
}
}
if (bln)
{
rowNum = i;
break;
}
}

sobaisobai
جمعه 20 آبان 1390, 18:27 عصر
من شماره line رو دارم از رو شماره line هم به مقدار اون line دسترسی دارم
حالا چه جوری چک کنم که مقدار عدد هست یا نه؟
اگه میشه رو کد زیر توضیح بدید چون هنگ کردم!!
var listLineText = new List<string>(richTextBox1.Text.Split('\n'));
for (var i = 0; i < listLineText.Count; i++)
{
if (listLineText[i].Contains(textBox2.Text.Trim()))
{
int counter = 1;
foreach (string str1 in richTextBox1.Text.Split('\n'))
{
if (counter++ == (i + 1))
{
richTextBox2.Text += str1 + Environment.NewLine;
}
}
}
}
ممنون

sobaisobai
جمعه 20 آبان 1390, 19:28 عصر
کسی نمیدونه؟
کارم گیره

Farshid007
جمعه 20 آبان 1390, 19:33 عصر
چه خبره بابا؟؟؟
void Search(string SearchCertain, TextBox textbox)
{
if (textbox.Text.ToLower().Contains(SearchCertain.ToL ower()))
{
textbox.Focus();
textbox.Select(textbox.Text.ToLower().IndexOf(Sear chCertain.ToLower()), SearchCertain.Length);
}
}

sobaisobai
جمعه 20 آبان 1390, 20:09 عصر
سلام
سوال من رو فکر کنم متوجه نشدی دوست عزیز

sobaisobai
جمعه 20 آبان 1390, 22:35 عصر
دوستان اگه کسی بلده راهنمایی کنه

mmd2009
جمعه 20 آبان 1390, 23:19 عصر
ببین دوست عزیز سوالت نمیدونم دقیقا این بود یا تغییر کرده:

ولی گفتید که فرضا تو جمله ی زیر :

ali
mohammad
2
hasan
safar
3
5
reza
mehdi

وقتی فرضا mehdi رو زدی بیاد اولین خطی که عدد داخلشه که قبل از mehdi باشه رو نشونت بده یعنی بگه تو خط 7 بوده اون عدد و خط 9 رو هم نشون بده که مهدی تو خط 10 بوده

خب اگر این منظورت بوده من کدی که قبلا بهت دادم رو به این صورت تغییر داده که مشکلت حل بشه همین امیدوام به دردت بخوره :


private void BtnSelectWithLineNumberClick(object sender, EventArgs e)
{
var listLineText = new List<string>(textBox1.Text.Split('\n'));

for (var i = 0; i < listLineText.Count; i++)
{
if (listLineText[i].Contains(txtSearch.Text.Trim()))
{
MessageBox.Show(string.Format("Line :{0}", (i + 1)));

for (var j = i; j >= 0; j--)
{
if (!CheckInt(listLineText[j])) continue;
MessageBox.Show(string.Format("Line Gabl az {0} :{1}", txtSearch.Text.Trim(), (j + 1)));
break;
}
}
}
}

public bool CheckInt(string str)
{
try
{
int.Parse(str);
return true;
}
catch (Exception)
{
return false;
}
}


اگر منظورت چیز دیگه ای بود بگو که بدونیم.

موفق باشی

sobaisobai
جمعه 20 آبان 1390, 23:38 عصر
داداش دمت گرم
فقط تو کد زیر شماره line قبل از mehdi رو نشون میده من میخوام مقدار موجود تو line قبل از mehdi رو نشون بده به شرطی که عدد باشه
MessageBox.Show(string.Format("Line Gabl az {0} :{1}", txtSearch.Text.Trim(), (j + 1)));
یه دنیا ممنون

mmd2009
جمعه 20 آبان 1390, 23:48 عصر
نمیدونم من منظورت رو اشتباهی می فهمم یا دقیقا نمیفهمم چی میخوای واسه همین همش کدها ایراد داره.

الان من منظورت رو اینطوری فهمیدم که مثلا در نوشته های بالا که زدم کاربر وقتی mehdi رو زد واسه جستجو بعدش شماره خطش رو نشون بده حالا یک خط قبل از mehdi رو به شرطی نشون بده که عدد باشه و الان نشون نده

اگر منظورت اینه خب شرط رو به این صورت بذار و مشکل دیگه حله


private void BtnSelectWithLineNumberClick(object sender, EventArgs e)
{
var listLineText = new List<string>(textBox1.Text.Split('\n'));

for (var i = 0; i < listLineText.Count; i++)
{
if (listLineText[i].Contains(txtSearch.Text.Trim()))
{
MessageBox.Show(string.Format("Line :{0}", (i + 1)));
if (CheckInt(listLineText[i-1]))
MessageBox.Show(string.Format("Line Gabl az {0} be sharti ke adad hast :{1}", txtSearch.Text.Trim(), (i)));
}
}
}

public bool CheckInt(string str)
{
try
{
int.Parse(str);
return true;
}
catch (Exception)
{
return false;
}
}


حالا با کد بالا اگر متن بالا رودر نظر بگیری و mehdi رو جستجو بکنی فقط شماره خط mehdi رو میده

اما با متن زیر

ali
mohammad
2
hasan
safar
3
5
mehdi

ولی اگر اینو جستجو کنی شماره خط mehdi رو میگه هم شماره خط قبلیش چون عدد هستش

حالا اگر خواستی عدد رو هم نشونت بده کد رو به این صورت بذار :


private void BtnSelectWithLineNumberClick(object sender, EventArgs e)
{
var listLineText = new List<string>(textBox1.Text.Split('\n'));

for (var i = 0; i < listLineText.Count; i++)
{
if (listLineText[i].Contains(txtSearch.Text.Trim()))
{
MessageBox.Show(string.Format("Line :{0}", (i + 1)));
if (CheckInt(listLineText[i-1]))
MessageBox.Show(string.Format("Line Gabl az {0} be sharti ke adad hast :{1} va addade an : {2}", txtSearch.Text.Trim(), (i), listLineText[i - 1]));
}
}
}

public bool CheckInt(string str)
{
try
{
int.Parse(str);
return true;
}
catch (Exception)
{
return false;
}
}


اگر باز مشکلی بود بگو کمکت میکنم :چشمک:

sobaisobai
جمعه 20 آبان 1390, 23:56 عصر
نوکرتم
حالا اگه بخوام شماره line قیل از mehdi رو نشون نده و فقط مقدارش رو به شرطی که عدد باشه نشون بده کدوم قسمت از کد رو حذف کنم؟

sobaisobai
شنبه 21 آبان 1390, 00:32 صبح
دوست عزیز من برنامه رو اپلود کردم
بذار توضیح بدم
برنامه رو اجرا کن و دکمه انتخاب فایل رو بزن
یه فایل word ترجیحا بامتن فارسی انتخاب کن
برنامه متن رو میخونه و میریزه تو richtextbox1
حالا تو تکست باکس متن مورد جستجو رو وارد کن و دکمه جستجو رو بزن
مشکل از اینجا شروع میشه
من میخوام وقتی شما کلمه علی رو سرچ کردی عدد قبل از علی رو بذار تو richtextbox2 بعلاوه line ی که علی توش بوده
مثلا اگه متن به صورت زیر بود:


1
علی حسینی
علی جباری
رضا محمدی
2
علی
3
داوود
تو richtextbox2 متن به صورت زیر بیاد

1
علی حسینی
علی جباری
2
علیکدی که دادی درست بود دستت درد نکته اما مشکلم اینه که چه جوری خروجی به شکلی که گفتم باشه
ممنون میشم اگه برنامه رو نگاه کنید و مشکلشو برطرف کنی
باتشکر

mmd2009
شنبه 21 آبان 1390, 01:35 صبح
خب اینی که الان نوشتم برات همین کاری که گفتی رو میکنه البته امیدوارم باید دوباره خودم تستش کنم :لبخند:

ولی خب به هر حال درسته و عین چیزی که گفتی رو انجام میده ولی کدهاشو با اجازت یک دست به صورتشون کشیدم خیلی هاشون رو اصلا نیازی نبود و فقط برنامه و کند می کردن و هیچ کاری نمی کردن و خیلی از کدهاتو هم به شکل استاندارد نوشتم در هر صورت امیدوارم تغییر کدهام برای موثر باشه چون خداییش تاکید خیلی زیادی دارم رو نوشتن کد های درست البته خودمم نمیدونم چقدر درست هستن امیدوارم اگر کسی دیگه دیدشون اگر اشکالی دید بگه.

موفق باشی

ویرایش :

اون خط شرط رو به این شکل در بیار اون یکی اشتباهه یادم رفت تصحیح کنم برات :


if (string.IsNullOrEmpty(textBox2.Text.Trim()))
{
MessageBox.Show(@"عبارت مورد جستجو را وارد کنید");
}


یک جایی دیگه هم هست که مطلب رو میذاره تو rich2 نگاهش کن باید به این صورت باشه اگر نبود اینطوریش بکن :


richTextBox2.AppendText(Environment.NewLine + listLineText[i] + Environment.NewLine);

sobaisobai
شنبه 21 آبان 1390, 10:44 صبح
سلام
اقا ممنون درسته
اون دو تا خط رو هم درست کردم
مرسی

sobaisobai
شنبه 21 آبان 1390, 17:45 عصر
سلام مجدد
داداش بازم ارور داره
اگه تو متنی که میخواهیم سرچ کنیم عدد نباشه ارور میگیره
از کد زیر
if (CheckInt(listLineText[i - 1]))
چیکار باید کرد که ارور نده

سوداگر
شنبه 21 آبان 1390, 23:37 عصر
ببخشید!
من پستهاتون رو خوندم ولی از این فایلهایی که دانلود کردم یه سوال دارم:
هر کدوم از این دوتا کمبوباکس و یه تکتباکس، چه کاری رو انجام میدن؟
یعنی کدومشون شماره خطه، کدوم کلمه سرچ شده است و ....
ممنون.

ولی اون ارور رو میتونی بی خیال بشی.
یعنی کدت رو توی یه try قرار بده و توی قسمت Catch یه پیغام چاپ کنه که مثلا متنتون عدد نداره.

sobaisobai
یک شنبه 22 آبان 1390, 22:19 عصر
سلام
کمبو باکس ها فعلا کاری نمیکنن
شما متنی رو که میخوای سرچ کنی تو تکست باکس وارد میکنی

ولی اون ارور رو میتونی بی خیال بشی.
یعنی کدت رو توی یه try قرار بده و توی قسمت Catch یه پیغام چاپ کنه که مثلا متنتون عدد نداره.
ممنون درست شد ولی کد زیر یه خط میاد عقب و چک میکنه که ایا مقدارش عدد هست یا نه.من میخوام تا سطر اول richtextbox برگرده و به اولین خطی که توش عدد بود رسید مقدارشو بریزه تو richtextbox2
if (CheckInt(listLineText[i - 1]))
چیکار کنم درست بشه؟

sobaisobai
دوشنبه 23 آبان 1390, 01:41 صبح
کسی نیست یه کمکی کنه؟

سوداگر
دوشنبه 23 آبان 1390, 18:39 عصر
.من میخوام تا سطر اول richtextbox برگرده و به اولین خطی که توش عدد بود رسید مقدارشو بریزه تو richtextbox2
if (CheckInt(listLineText[i - 1]))

چیکار کنم درست بشه؟
منظورتو درست نمیفهمم:گیج:
اگه زمانی که توی متنمون عدد نباشه ارور میگیره، پس چرا میخوایی دنبال خطی بگردی که عدد داره؟:گیج:
وقتی که یه متن، عدد نداشت و ارور گرفت، سالم و سلامت، برنامه بلاک کچ رو اجرا میکنه، خوب شما هم همین رو میخواستی که وقتی متن وارد شده، عدد نداشت، ارور نده. دیگه نگران چی هستی؟
من که واقعاً گیج شدم:گیج:
یه چیز دیگه:
برای بستن برنامه از کد:
Application.Exit(); استفاده کن.
موفق باشید.

sobaisobai
دوشنبه 23 آبان 1390, 18:54 عصر
سلام
ممنون دوست عزیز از نظرت
کد زیر رو نگاه کن
if (CheckInt(listLineText[i - 1]))
i-1 یه خط میاد عقب وچک میکنه که ایا عدد هست یا نه
یا مثلا i-2 دو خط میاد عقب و چک میکنه
من میخوام به جای -1 یه حلقه بذارم که تا سطر اول richtextbox یکی یکی برگرده و به اولین عددی که رسید مقدار اون عدد رو بریزه تو richtextbox2
حالا حلقه رو کجا بذارم؟
ممنون

سوداگر
دوشنبه 23 آبان 1390, 19:12 عصر
حالا حلقه رو کجا بذارم؟
توی یه تابع (متد).
متدش رو خودت بنویس ومقدار بازگشتی اون رو توی پرانتز جلوی if، چک کن.

sobaisobai
دوشنبه 23 آبان 1390, 19:13 عصر
اگه بتونی تو برنامه ای که اپ کردم انجام بدی ممنون میشم

mmd2009
دوشنبه 23 آبان 1390, 19:38 عصر
سلام

نمیدونم منظورتو دقیق فهمیدم یا نه ولی خب این کد رو ببین و جایگزین کد با کدهای مشابه خودش :


private void BtnFindClick(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox2.Text.Trim()))
{
MessageBox.Show(@"عبارت مورد جستجو را وارد کنید");
}
else
{
richTextBox2.Text = "";
var listLineText = new List<string>(richTextBox1.Text.Split('\n'));
foreach (var t in listLineText)
{
if (!t.Contains(textBox2.Text.Trim())) continue;
var s = string.Empty;
if (CheckInt(listLineText, ref s))
richTextBox2.AppendText(s);
if (string.IsNullOrEmpty(t)) continue;
richTextBox2.AppendText(Environment.NewLine + t + Environment.NewLine);
}
_find = 0;
foreach (var str in richTextBox2.Text.Select(t => textBox2.Text.Trim()).Where(str => richTextBox2.Text.Substring(_find).Contains(str)))
{
richTextBox2.Focus();
richTextBox2.Select(Search(richTextBox2.Text, str), str.Length);
_find += str.Length;
richTextBox2.SelectionColor = Color.Green;
}
}
}


و اینم متدش که باید تغییرش بدی :


public bool CheckInt(List<string> str, ref string ss)
{
foreach (var s in str)
{
try
{
int.Parse(s);
ss = s;
return true;
}
catch (Exception)
{
//TODO:
}
}
return false;
}

sobaisobai
دوشنبه 23 آبان 1390, 20:24 عصر
خیلی ممنون دوست عزیز
ولی کدی که شما دادی تا خط اول برمیگرده و فقط مقدار 1 رو میریزه تو richtextbox2
متن زیر رو نگاه کنید :


1
علی
عیسی
2
حسن
مجید
3
رضا
محسن
تقی
من میخوام وقتی حرف ی رو جستجو کردم خروجی به صورت زیر باشه :


1
علی
عیسی
2
مجید
3
تقی
اگه من با کدی که شما دادید کلمه ی رو جستجو کنم خروجی به صورت زیر میشه


1
علی
عیسی
1
مجید
1
تقی
یعنی ی که مثلا تو خط 6 پیدا شده تابع از خط 6 بیاد عقب و هرجا به خطی رسید که عدد بود مقدار اون عدد رو بریزه تو richtextbox2 نه اینکه فقط اخرین مقدار مثلا 1 رو بریزه تو richtextbox2
بازم ممنون

Farshid007
دوشنبه 23 آبان 1390, 20:50 عصر
سلام
سوال من رو فکر کنم متوجه نشدی دوست عزیز
این واسه سوالی که مربوط میشه به اصل مطلب(یعنی جستجو در تکست باکس)

sobaisobai
دوشنبه 23 آبان 1390, 21:42 عصر
این واسه سوالی که مربوط میشه به اصل مطلب(یعنی جستجو در تکست باکس)
بله دوست گرامی