سلام
چطور میشه فهمید متن فارسی نوشته شده دریک تکست باکس (یا لیبل یا یک فیلد رشته ای در کریستال ریپورت) چند خط است؟
شاید به نظر خیلی ساده برسه(برای خودم اول همینطور بود)ولی الان برام به یه مشکل سخت تبدیل شده.
لطفا کمک کنید
ممنون
سلام
چطور میشه فهمید متن فارسی نوشته شده دریک تکست باکس (یا لیبل یا یک فیلد رشته ای در کریستال ریپورت) چند خط است؟
شاید به نظر خیلی ساده برسه(برای خودم اول همینطور بود)ولی الان برام به یه مشکل سخت تبدیل شده.
لطفا کمک کنید
ممنون
تمام کاراکترهارا باید تک تک بخوانیدو کد آنهارااستخراج کنید. هرکد13 که دستور کلید اینتر می باشد یک خط جدید ایجاد کرده است که باشمارش آنها می توان تعداد خطوط را به دست آورد.
برای ایجاد سطر جدید ، نیازی به وجود Enter در متن نیست و اگه خاصیت AutoSize آن کنترل False باشد ، کنترل متن را در سطرهای جدید میشکند.
برای 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());
در ضمن این یک کد پایه است. باید خودت کاملترش کنی
اگه WordWrap برابر True باشه که متن را بر اساس Size کنترل بشکند ، نمی توان از Lines.Lenght استفاده کرد. Lines.Lenght تعداد سطرها را در صورتی که Enter زده شده باشد رو برمیگردونه ولی اگه توسط خود کنترل Wrap بشه ، بحساب نمیاد.
با سلام
یه راه دیگه هم داره که من اینو ترجیح مىدم.
string[] iStrArray = txtMyText.Text.Split('\n\);
حالا کافیه iStrArray.Length رو یکى بهش اضافه کنى، مىشه تعداد سطرها.
صبا صبوحى
پ.ن: البته به شرط این که Enter زده شده باشه.
تمام اینها بشرطیه که با n\ یا r\ در مت موجود باشه ، ولی خاصیت Wrap کنترل در هنگام شکستن متن در خطهای جدید ، از اینها استفاده نمیکنه.
سلام
با تشکر از همه دوستان
فکر کنم سوالم را یه کم ناقص نوشتم. ببینید عزیزان من یه برنامه کتابداری نوشتم در یه قسمت از این برنامه باید کارتهای کتاب ( که حتما همتون در کتابخانه موقع پیدا کردن کتاب اون را دیدن) چاپ بشه. اطلاعات ثبت شده در سیستم به شکل خاصی پشت سرهم چیده می شود(چندین رشته با هم جمع می شود) . حال موقع چاپ این اطلاعات در یک فیلد string کرستال قرار می گیرد.برای کتابهایی که اطلاعتشان زیاد نیست مشکل نداره . ولی اگه اطلاعات بیشتر از اندازه یه کارت بشه باید دو تا کارت برای یک کتاب چاپ کرد . پس بادید قبل از چاپ اندازه متن بررسی بشه و اگر بیشتر از یه کارت میشه اون را اصلاح کرد.
مشکل تو همین قسمت آخره یعنی تشخصی تعداد خطوط عبارت موقع بررسی تعداد کارت لازم.
من خودم راه های مختلفی را امتحان کردم ولی نتیجه نگرفتم .مثلا شمردن تعداد کاراکتر هیچ کمکی نمیکنه چون اندازه حروف فارسی مثل حروف لاتین مساوی نیست مثلا تو یه خط میشه 50 تا حرف ک نوشت ولی برای حرف ی این تعداد 90 کاراکتر در یک خط است.
از توجه شما ممنونم
[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 ای هست که میخوای تعداد خطوط را به دست بیاری
مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084
وب سایت : http://www.mkiani.ir
پست الکترونیک : mkiani3000@gmail.com
موفق و پیروز باشید.
مهدی کیانی
خیلی خیلی ممنونم . دقیقا همون چیزیه که لازم داشتم
امیدوارم بتونم جبران کنم
تشکر
مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084
وب سایت : http://www.mkiani.ir
پست الکترونیک : mkiani3000@gmail.com
موفق و پیروز باشید.
مهدی کیانی
بعضی از دوستان ظاهرا در استفاده از کدی که من فرستادم با مشکل بر خوردند که احتمالا مشکلاشن هم در اضافه نکردن کد زیر بوده
using System.Runtime.InteropServices;
یه نمونه برنامه هم attach می کنم
موفق باشید
مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084
وب سایت : http://www.mkiani.ir
پست الکترونیک : mkiani3000@gmail.com
موفق و پیروز باشید.
مهدی کیانی