PDA

View Full Version : متن فارسی نوشته شده دریک تکست باکس چند خط است



ESG_Esfahan
شنبه 08 دی 1386, 13:07 عصر
سلام
چطور میشه فهمید متن فارسی نوشته شده دریک تکست باکس (یا لیبل یا یک فیلد رشته ای در کریستال ریپورت) چند خط است؟
شاید به نظر خیلی ساده برسه(برای خودم اول همینطور بود)ولی الان برام به یه مشکل سخت تبدیل شده.
لطفا کمک کنید
ممنون

alireza1384
یک شنبه 09 دی 1386, 07:59 صبح
تمام کاراکترهارا باید تک تک بخوانیدو کد آنهارااستخراج کنید. هرکد13 که دستور کلید اینتر می باشد یک خط جدید ایجاد کرده است که باشمارش آنها می توان تعداد خطوط را به دست آورد.

hassan razavi
یک شنبه 09 دی 1386, 08:13 صبح
برای ایجاد سطر جدید ، نیازی به وجود Enter در متن نیست و اگه خاصیت AutoSize آن کنترل False باشد ، کنترل متن را در سطرهای جدید میشکند.

MH2538
یک شنبه 09 دی 1386, 08:55 صبح
برای textbox می‌تونی از دستور زیر استفاده کنی (البته اگر wordwrap رو برابر true قرار بدی نتیجه بر اساس n/ محاشبه می شه نه اون چیزی که نمایش داده می‌شه)


MessageBox.Show(textBox1.Lines.Length.ToString());

برای Label‌هم می‌تونی به برنامه‌ات یک کلک کوچک بزنی.


TextBox t = new TextBox();
t.Size = label1.Size;
t.Text = label1.Text.Trim();
MessageBox.Show(t.Lines.Length.ToString());

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

hassan razavi
یک شنبه 09 دی 1386, 09:07 صبح
اگه WordWrap برابر True باشه که متن را بر اساس Size کنترل بشکند ، نمی توان از Lines.Lenght استفاده کرد. Lines.Lenght تعداد سطرها را در صورتی که Enter زده شده باشد رو برمیگردونه ولی اگه توسط خود کنترل Wrap بشه ، بحساب نمیاد.

SabaSabouhi
یک شنبه 09 دی 1386, 09:38 صبح
با سلام
یه راه دیگه هم داره که من اینو ترجیح مى‌دم.



string[] iStrArray = txtMyText.Text.Split('\n\);


حالا کافیه iStrArray.Length رو یکى بهش اضافه کنى، مى‌شه تعداد سطرها.


صبا صبوحى

پ.ن: البته به شرط این که Enter زده شده باشه.

hassan razavi
یک شنبه 09 دی 1386, 09:45 صبح
تمام اینها بشرطیه که با n\ یا r\ در مت موجود باشه ، ولی خاصیت Wrap کنترل در هنگام شکستن متن در خطهای جدید ، از اینها استفاده نمیکنه.

ESG_Esfahan
پنج شنبه 20 دی 1386, 00:11 صبح
سلام
با تشکر از همه دوستان
فکر کنم سوالم را یه کم ناقص نوشتم. ببینید عزیزان من یه برنامه کتابداری نوشتم در یه قسمت از این برنامه باید کارتهای کتاب ( که حتما همتون در کتابخانه موقع پیدا کردن کتاب اون را دیدن) چاپ بشه. اطلاعات ثبت شده در سیستم به شکل خاصی پشت سرهم چیده می شود(چندین رشته با هم جمع می شود) . حال موقع چاپ این اطلاعات در یک فیلد string کرستال قرار می گیرد.برای کتابهایی که اطلاعتشان زیاد نیست مشکل نداره . ولی اگه اطلاعات بیشتر از اندازه یه کارت بشه باید دو تا کارت برای یک کتاب چاپ کرد . پس بادید قبل از چاپ اندازه متن بررسی بشه و اگر بیشتر از یه کارت میشه اون را اصلاح کرد.
مشکل تو همین قسمت آخره یعنی تشخصی تعداد خطوط عبارت موقع بررسی تعداد کارت لازم.
من خودم راه های مختلفی را امتحان کردم ولی نتیجه نگرفتم .مثلا شمردن تعداد کاراکتر هیچ کمکی نمیکنه چون اندازه حروف فارسی مثل حروف لاتین مساوی نیست مثلا تو یه خط میشه 50 تا حرف ک نوشت ولی برای حرف ی این تعداد 90 کاراکتر در یک خط است.
از توجه شما ممنونم

Mahdi.Kiani
پنج شنبه 20 دی 1386, 19:16 عصر
سلام
چطور میشه فهمید متن فارسی نوشته شده دریک تکست باکس (یا لیبل یا یک فیلد رشته ای در کریستال ریپورت) چند خط است؟
شاید به نظر خیلی ساده برسه(برای خودم اول همینطور بود)ولی الان برام به یه مشکل سخت تبدیل شده.
لطفا کمک کنید
ممنون






[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
const uint EM_GETLINECOUNT = 0xBA;
IntPtr wp=IntPtr.Zero;
IntPtr lp=IntPtr.Zero;



این هم طریقه استفاده





IntPtr lines = SendMessage(textBox1.Handle, EM_GETLINECOUNT,wp,lp);
MessageBox.Show(lines.ToInt32().ToString());



textbox1 همون TextBox ای هست که میخوای تعداد خطوط را به دست بیاری

ESG_Esfahan
یک شنبه 23 دی 1386, 00:04 صبح
خیلی خیلی ممنونم . دقیقا همون چیزیه که لازم داشتم
امیدوارم بتونم جبران کنم
تشکر

Mahdi.Kiani
یک شنبه 23 دی 1386, 08:50 صبح
خیلی خیلی ممنونم .

تشکر
خواهش می کنم





دقیقا همون چیزیه که لازم داشتم

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


امیدوارم بتونم جبران کنم


می تونم شماره حساب بدم. البته با پی ام خصوصی :بامزه:

Mahdi.Kiani
دوشنبه 24 دی 1386, 08:13 صبح
بعضی از دوستان ظاهرا در استفاده از کدی که من فرستادم با مشکل بر خوردند که احتمالا مشکلاشن هم در اضافه نکردن کد زیر بوده



using System.Runtime.InteropServices;


یه نمونه برنامه هم attach می کنم
موفق باشید