PDA

View Full Version : شبیه سازی پنجره جستجو Webbrowser در فرم



Shadow Walker
دوشنبه 27 خرداد 1392, 09:21 صبح
سلام خدمت همگی
می خوام پنجره ی Find ی رو که با زدن ctrl + f در Web Broser میاد رو در فرمم شبیه سازی کنم
لطفا کمک کنید
از وقتتون ممنون

Shadow Walker
دوشنبه 27 خرداد 1392, 20:03 عصر
یعنی کسی از اساتید بلد نیست ؟

Shadow Walker
سه شنبه 28 خرداد 1392, 00:38 صبح
up up up up

میلاد رئیسی
سه شنبه 28 خرداد 1392, 07:46 صبح
سلام . یک فرم جستجو درست کن ! بعد بهترین کار اینه که یه منو بزاری روی فرمت و یه آیتم Find بهش اضافه کنی و براش شورت کات کی تعریف کنی ! حالا این که کجا میخوایی جستجو کنی و چطور بحثش فرق میکنه !

httplistener
سه شنبه 28 خرداد 1392, 10:02 صبح
سلام
اگر منظورتون رو درست فهمیده باشم شما یک وب بروزر تو فرمتون دارید که می خواید داخلش جستجو انجام بدید،
برای اینکار ابتدا روی پروژه راست کلیک کنید-> AddReference -> و از تب COM کامپوننت Microsoft HTML Object Library رو وارد پروژه بکنید.
سپس اون رو به این شکل ایمپورت کنید:

using mshtml;

حال من متدی براتون ساختم که کافیه اون رو به برنامتون اضافه بکنید:

private void FindNext(string str)
{

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function FN(str){var found = false;var textRange = document.selection.createRange ();if (textRange.text.length > 0){textRange.collapse (true);textRange.move ('character', 1);}found = textRange.findText (str);if (found){textRange.select ();} }";
head.AppendChild(scriptEl);
webBrowser1.Document.InvokeScript("FN", new object[] {str});
}

که در اون webBrowser1 نام کنترل وب بروزر هست.
بقیشم که معلوم هست،در رویداد کلیک دکمه ای Next که ساختید کافیه متد فوق رو با آرگومنت مناسب فرا بخونید:

private void btn_Next_Click(object sender, EventArgs e)
{
FindNext("سلام");
}

واسلام.

اما اگر شما با استفاده از پنجره Find وب بروزر مشکلی ندارید،و فقط می خواید این فراخونی از طریق یک دکمه انجا بشه می تونید به این شکل عمل کنید :

private void btn_Find_Click(object sender, EventArgs e)
{
webBrowser1.Focus();
SendKeys.SendWait("^f");
}

Shadow Walker
سه شنبه 28 خرداد 1392, 11:38 صبح
سلام
اگر منظورتون رو درست فهمیده باشم شما یک وب بروزر تو فرمتون دارید که می خواید داخلش جستجو انجام بدید،
برای اینکار ابتدا روی پروژه راست کلیک کنید-> AddReference -> و از تب COM کامپوننت Microsoft HTML Object Library رو وارد پروژه بکنید.
سپس اون رو به این شکل ایمپورت کنید:

using mshtml;

حال من متدی براتون ساختم که کافیه اون رو به برنامتون اضافه بکنید:

private void FindNext(string str)
{

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function FN(str){var found = false;var textRange = document.selection.createRange ();if (textRange.text.length > 0){textRange.collapse (true);textRange.move ('character', 1);}found = textRange.findText (str);if (found){textRange.select ();} }";
head.AppendChild(scriptEl);
webBrowser1.Document.InvokeScript("FN", new object[] {str});
}

که در اون webBrowser1 نام کنترل وب بروزر هست.
بقیشم که معلوم هست،در رویداد کلیک دکمه ای Next که ساختید کافیه متد فوق رو با آرگومنت مناسب فرا بخونید:

private void btn_Next_Click(object sender, EventArgs e)
{
FindNext("سلام");
}

واسلام.

اما اگر شما با استفاده از پنجره Find وب بروزر مشکلی ندارید،و فقط می خواید این فراخونی از طریق یک دکمه انجا بشه می تونید به این شکل عمل کنید :

private void btn_Find_Click(object sender, EventArgs e)
{
webBrowser1.Focus();
SendKeys.SendWait("^f");
}

ممنون از وفتی که برای بنده گزاشتید
اما متاسفانه فقط پرش می کنه و highlight نمیکنه و فکر کنم به بعدی هم نمیره و روی اولی توقف میکنه
دفیقا مثل خود webbrowser بیشتر قصدم از ساخت این، راحتی کار برای کاربر و همچنین فارسی بودن است
ممنون میشم کمک کنید

httplistener
چهارشنبه 29 خرداد 1392, 08:16 صبح
سلام مجدد.
از این متد استفاده کنید:

private void FindNext2(string str)
{

IHTMLDocument2 doc = webBrowser1.Document.DomDocument as IHTMLDocument2;

IHTMLSelectionObject sel = doc.selection;
IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;

rng.collapse(false);
if (rng.findText(str, 1000000, 0))
{
rng.select();

}
}

Shadow Walker
چهارشنبه 29 خرداد 1392, 09:15 صبح
private void btn_Find_Click(object sender, EventArgs e)
{
webBrowser1.Focus();
SendKeys.SendWait("^f");
}


حداقل کسی نمیدونه چطور از طریق فرم براش آرگومان بفرستم؟
مثلا تو TextBox زدم "سلام" این find باز بشه و "سلام" داخلش نوشته بشه
ممنون

diamond-program
چهارشنبه 29 خرداد 1392, 09:39 صبح
شما راحت میتونی با اُ سی اکس مخصوصش که توی همه ی زبان های مبتنی بر وب هست کارت را انجام بدی

matrix-program
چهارشنبه 29 خرداد 1392, 09:42 صبح
میخواید تو فرم و داخل یه تکست باکس این کار را بکنید درسته؟

Shadow Walker
شنبه 01 تیر 1392, 11:29 صبح
میخواید تو فرم و داخل یه تکست باکس این کار را بکنید درسته؟
بله دقیقا همین طوره