PDA

View Full Version : سوال: پیدا کردن تعداد خطوط richtextbox



mthreat.info
چهارشنبه 13 اسفند 1393, 12:21 عصر
سلام و خدا قوت
میخواستم تعداد خطوط richtextbox رو در بیارم تا یه جاهایی هم رسیدم ولی نمیدونم چرا یک جا کار میکنه ولی جای دیگه شماره ی اندکس حرف رو میده
شرایط حروف :
1-حروف معلوم نیست به چه زبانی هست
2-از اینتر استفاده نشده بلکه از word wrap استفاده شده
3-اندازه ی هر حرف رو نداریم!!!! مثلا 4 تا i میشه یه k
اما کدی که نوشتم
List<string> list=new List<string>();
int start, end,reshteh;
start =end=reshteh = 0;
bool no = false;
list.Clear();
richtextbox1.SelectionStart = richtextbox1.SelectionLength = 0;
for (int i = 0; i < richtextbox1.TextLength; i++)
{
if ((richtextbox1.GetLineFromCharIndex(i)+1)>start)
{
if (richtextbox1.SelectionLength>0)
{
list.Add(richtextbox1.SelectedText);
end++;
no = true;
}
start = (richtextbox1.GetLineFromCharIndex(i) + 1);
richtextbox1.SelectionStart = i;

}
else
{
reshteh = 0;
if (no && list[end-1].Length!=null )
{
int cou = list.Count;
for (int po = 0; po < cou; po++)
{
reshteh += list[po].Length;
}
richtextbox1.SelectionLength = i+1-reshteh;
}
else
{
richtextbox1.SelectionLength = i + 1;
}
}
}
list.Add(richtextbox1.SelectedText);

mthreat.info
چهارشنبه 13 اسفند 1393, 12:26 عصر
راستی یه چیز رو دوباره میگم اما یه جور دیگه
همیشه
richtextbox1.Lines
مساوی یک هست
و جایی که باگ میده
richtextbox1.GetLineFromCharIndex(i)
هست

mthreat.info
چهارشنبه 13 اسفند 1393, 16:34 عصر
مثلا این ورودی مون هست
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiii

mthreat.info
چهارشنبه 13 اسفند 1393, 17:30 عصر
این اسپیس ها کار ادیتور هست و ورودیمون نیست

mthreat.info
چهارشنبه 13 اسفند 1393, 20:20 عصر
من از الگوریتم های wordwrap استفاده کردم ولی جواب نمیداد کلا چه طوری میشه تعداد خطوط رو بدست آورد

mthreat.info
یک شنبه 16 فروردین 1394, 14:24 عصر
سلام مجدد ، این همه تلاش کردم که متن هر خط رو با شماره ی خطش در بیارم ولی نمیشه ، کسی این کار رو قبلا انجام داده؟

am_al_59
دوشنبه 17 فروردین 1394, 02:49 صبح
چه از WordWrap استفاده کنی چه نکنی فرقی نمیکنه
این چیزی که شما میخوای با تغییر طول و عرض Box یا تغییر نوع فونت یا اندازه یا سایر پارامتر ها تغییر میکنه
باید از طریق مکان یابی نقطه بالا سمت چپ و پایین سمت راست چیزی که میخوای رو بدست بیاری
کدش این میشه:


richTextBox1.GetLineFromCharIndex(richTextBox1.Get CharIndexFromPosition(new Point(richTextBox1.ClientRectangle.Size)));


مقداری که این کد برمیگردونه جاوی تعداد خطوطیه که کنترل لازم داره تا کل متن شما رو نمایش بده
حالا ممکنه متن شما در 20 خط نمایش داده بشه اما کنترل به دلیل طول و عرضش فقط 5 خطو نشون بده
البته این کد برای فریم وزک 3.5 به بالا درست کار میکنه
برای فریم ورک 2.0 باید Rectangle اونو تبدیل به Graphic کنی بعد با تابع Measure فونت و متنو بهش بدی و نتیجه رو با Rectangle اصلی مقایسه کنی خلاصه که داستان داری
اگر میخوای با فریم ورک 3.5 به پایین کارکنی خدا به دادت برسه

golestan1
سه شنبه 18 فروردین 1394, 07:55 صبح
نمونه زیر تعداد رو یکی اضافه نشون میده اما به راحتی می تونی 1 رو از کل تعداد کم کنی و دوباره در تکست باکس تعداد ارقام رو دقیق نشون بدی
البته این تعداد سطر رو نشون میده اما شاید به کارت بیاد

mthreat.info
سه شنبه 18 فروردین 1394, 16:05 عصر
از کمک هر دوی شما ممنونم ولی نکته ای که فراموش کردم اون اول ذکر کنم و در پست 6 گفتم اینه که من متن هر خط با شمارش رو میخوام و گرنه شمارش آسون هست

am_al_59
سه شنبه 18 فروردین 1394, 16:31 عصر
اینو جک کن

mthreat.info
سه شنبه 18 فروردین 1394, 17:02 عصر
سلام مجدد من برنامه ای که گذاشتید رو نگاه کردم جالب بود ولی من متن رو میخوام ، تقریبا اولین کدی بود که دیدم درست کار میکنه مابقی بسته به فونت یا حرف خطاهایی داشتن

am_al_59
سه شنبه 18 فروردین 1394, 17:08 عصر
کد قبلی هم همین کارو میکرد این یکی تعداد کاراکتر ها تو هر خط رو هم میشمره
اگر اینم نیست پس من متوجه نشدم شما چی میخوای

mthreat.info
سه شنبه 18 فروردین 1394, 22:45 عصر
تعداد خطوط wordwrap شده + متن هر خط بصورت جدا شده ، چیزی که من نوشتم اینه 130124
ولی بعضی جاها شماره ی ایندکس متن رو میده

am_al_59
چهارشنبه 19 فروردین 1394, 01:05 صبح
وقتی شما شماره ایندکس خط رو از اول داری خیلی راحت میشه اونو ببری اسم تابعش تو C# هست SubString
از اول شروع کن رشتتو ببر همینطور الی آخر رشته باقی مانده رو ببر

mthreat.info
چهارشنبه 19 فروردین 1394, 06:21 صبح
حرف شما درست ولی GetLineFromCharIndex بجای دادن شماره ی لاین به من شماره ی ایندکس حرف رو برمیگردونه ، خودم موندم چرا همچین کاری رو میکنه