PDA

View Full Version : سوال: یافتن شماره بالاترین سطر نمایش داده شده در richtextbox



saber187518
پنج شنبه 05 اسفند 1389, 00:34 صبح
با سلام
دوستان عزیز من میخوام شماره بالاترین سطری رو که در سک richtextbox نمایش داده میشه پیدا کنم.
برنامه چیه؟و قراره چکار کنه؟
فرض کنید که من میخوام یک ادیتور بنویسم که مثل notepad++ شماره سطرها رو نمایش بده.
حالا یه مسئله دارم و اون اینه که فرض کنید کاربر 300 خط تایپ کرده و حالا به یک سطر در این میان حرکت میکنه و مثلا به سطر 147 میره. حالا من از کجا بفهمم که این سطری که به عنوان اولین سطر توی richtextbox میبینم شمارش چنده؟
امیدوارم که تونسته باشم سوالم رو خوب و درست مطرح کنم.
منتظر هستم...

AmirHarirbafan
پنج شنبه 05 اسفند 1389, 09:19 صبح
منظورتونو اینجوری متوجه شدم :


int lineNumber = richTextBox1.GetLineFromCharIndex(
richTextBox1.GetCharIndexFromPosition(new Point(0, 10))) + 1;

saber187518
پنج شنبه 05 اسفند 1389, 10:58 صبح
با سلام
دوست عزیز خیلی خیلی ممنون از این کمکی که به من کردید.
لطف کنید که توضیح بدید کدتون رو چون واقعا چیزی متوجه نشدم.
دسترها رو میشناسم اما چطور این کار انجام شد ؟
چون من خودم هزار روش رو امتحان کردم اما نشد که نشد!!!!!!!!!!
باز هم ممنون

saber187518
پنج شنبه 05 اسفند 1389, 11:27 صبح
با سلام
راستی دوست عزیز الان که داشتم با برنامه کار میکردم
متوجه شدم که قطعه کد شما فقط با زدن دکمه enter میتونه شماره سطر رو پیدا کنه ، ولی من میخوام اگه حتی کاربر با کلید های جهتی هم در بین سطرها حرکت کرد و سزرها رو پیمایش کرد شماره سطر با مکان فعلی کرسر تنظیم بشه .
برای حل این مسئله چیزی به ذهن شما میرسه؟:ناراحت:

AmirHarirbafan
پنج شنبه 05 اسفند 1389, 14:10 عصر
لطف کنید که توضیح بدید کدتون رو چون واقعا چیزی متوجه نشدم.


-متد GetCharIndexFromPosition یک نقطه از ریچ تکست باکس رو میگیره و میگه که ایندکس اون کاراکتری که در زیر اون نقطه قرار داره چنده
-بعد عدد به دست آمده رو به متد GetLineFromCharIndex دادیم، این تابع شماره کاراکتر رو میگیره و به ما شماره خطی که اون عدد داخلش قرار داره رو میده
-چون خط ها از 0 شروع میشن و ما میخوایم خط اول با عدد 1 مشخص بشه، شماره خط رو یک واحد اضافه کردیم
- پارامتر new Point(0, 10) همون نقطه ای از ریچ تکس باکس رو مشخص میکنه که قبلا در موردش صحبت کردیم، چون نوشته ها دقیقا از نقطه 0و 0 شروع نمیشن و معمولا چند پیکسل از بالای ریچ تکست باکس فاصله دارن، از نقطه 0 و 10 شروع کردیم تا کمی پایین تر بیایم



متوجه شدم که قطعه کد شما فقط با زدن دکمه enter میتونه شماره سطر رو پیدا کنه ، ولی من میخوام اگه حتی کاربر با کلید های جهتی هم در بین سطرها حرکت کرد و سزرها رو پیمایش کرد شماره سطر با مکان فعلی کرسر تنظیم بشه .
برای حل این مسئله چیزی به ذهن شما میرسه؟

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

موفق باشید