PDA

View Full Version : جستجو در TextBox به صورتي كه شماره خط كلمه پيدا شده رو برگردونه



Armin060
پنج شنبه 03 بهمن 1387, 19:35 عصر
چطوری ميشه اين كار رو كرد؟

saeed-kh
جمعه 04 بهمن 1387, 10:33 صبح
راستش تا حالا به متدی که شماره خط رو برگردونه برخورد نکردم و اگر دوستان میدونند هم ممنون میشم اگه بگن.
من از یک راه دیگه رفتم
Richtextbox.find()شماره موقعیت کلمه رو میده.
و با توجه به موقعیت کلمه شماره خط رو پیدا کردم با یک شمارنده که خطوط رو میشمرد تا به اون موقعیت کلمه که متد find()در کنترل Richtextboxپیدا میکرد برسه.

Armin060
جمعه 04 بهمن 1387, 11:11 صبح
بله...مرسی....من هم اين كار رو كردم، فقط يكم سرعت كم ميشه....من قراره اين كار رو در حلقه های طولانی انجام بدم، واسه همين سرعت برام خيلی ارزش داره. من به دنبال يك متد آماده يا غير آماده سریع هستم، يا يك فورمول كه مثلا با تعداد كل كاراكتر ها و تعداد خط ها و شماره كاراكتر پيدا شده، شماره خط رو به دست بياره.
خودم يك فورمول واسه اين كار پيدا كردم، ولی وقتی كه تعداد خط هاي و كاراكتر ها زياد باشه، اشتباه محاسبه ميكنه. حدودا با اختلاف 2 يا 3 خط شماره خط رو به دست مياره. ولی من دقيق ميخوام.

newgoldenman
جمعه 04 بهمن 1387, 12:29 عصر
بني آدم اعضاي يك پيكرند...

سلام دوست عزيز، اينم كلاسي كه دنبالش هستي. دقيقاً كاري رو برات انجام ميده كه ميخواي:


using System;
using System.Windows.Forms;

namespace TextBoxLines
{
public class TextBoxEx : TextBox
{
private const int EM_GETLINECOUNT = 0xBA;
private const int EM_LINEINDEX = 0xBB;
private const int EM_LINELENGTH = 0xC1;

public TextBoxEx()
: base()
{
this.Multiline = true;
this.ScrollBars = ScrollBars.Vertical;
}

public int LineCount
{
get
{
Message msg = Message.Create(this.Handle, EM_GETLINECOUNT, IntPtr.Zero, IntPtr.Zero);
base.DefWndProc(ref msg);
return msg.Result.ToInt32();
}
}

public int LineIndex(int Index)
{
Message msg = Message.Create(this.Handle, EM_LINEINDEX, (IntPtr)Index, IntPtr.Zero);
base.DefWndProc(ref msg);
return msg.Result.ToInt32();
}

public int LineLength(int Index)
{
Message msg = Message.Create(this.Handle, EM_LINELENGTH, (IntPtr)Index, IntPtr.Zero);
base.DefWndProc(ref msg);
return msg.Result.ToInt32();
}
}
}



توي يكسري پروژه هام كه براي يك سازمان خاص انجام ميدم، بدون اين كامپوننت نميشه كاري كرد!!

موفق باشيد.

Sajjad.Aghapour
جمعه 04 بهمن 1387, 12:51 عصر
int i = textBox1.Text.IndexOf("str");
int j = textBox1.GetLineFromCharIndex(i);