کنترل WebBrowser

از کنترل WebBrowser، برای نمایش محتویات صفحات وب، فایل‌های XML و متنی استفاده می‌شود. این کنترل به طور خودکار، لینک‌هایی را که کاربر بر روی انها کلیک می‌کند، دنبال کرده و با استفاده از آن می‌توان تمام امکانات مربوط به یک مرورگر وب را پیاده سازی کرد. در اصل این کنترل یک نسخه از مرورگر Internet Explorer ویندوز را در داخل فرم ما نمایش می‌دهد. در نتیجه تمام صفحاتی که ما در برنامه با آنها سر و کار داریم، در تاریخچه این مرورگر ذخیره می‌شوند. کنترل WebBrowser دارای خواص و متدهای مختلفی برای پیمایش اسناد مختلف می‌باشد، که در زیر به برخی از آنها اشاره شده است :

خاصیت توضیح
AllowNavigation مشخص می‌کند که آیا کنترل WebBrowser می‌تواند وقتی که یک صفحه بارگذاری شد، صفحات دیگر را باز کند یا نه؟
AllowWebBrowserDrop مشخص می‌کند که آیا کنترل WebBrowser می‌تواند سندی را که به داخل آن Drag شده است را پیمایش کند یا نه؟
CanGoBack مشخص می‌کند که آیا صفحات دیگر در لیست تاریخچه وجود دارند و کنترل می‌تواند از صفحه فعلی یک صفحه رو به عقب حرکت کند. یعنی صفحه قبل را باز کند.
CanGoForward مشخص می‌کند که آیا صفحات دیگر در لیست تاریخچه وجود دارند و کنترل می‌تواند از صفحه فعلی یک صفحه رو به جلو حرکت کند. یعنی صفحه بعد را باز کند.
Document یک HtmlDocument که نماینده صفحه وب جاری است را بر می‌گرداند.
DocumentText محتویات HTML صفحه نمایش داده شده در کنترل را بر می‌گرداند.
DocumentTitle عنوان سند جاری که در کنترل در حال نمایش است را بر می‌گرداند.
DocumentType نوع سند جاری که در کنترل در حال نمایش است را بر می‌گرداند.
IsOffline با برگرداندن یک مقدار مشخص می‌کند که آیا کنترل WebBrowser در حالت آفلاین است یا خیر؟
ReadyState با برگرداندن یک مقدار وضعیت جاری کنترل WebBrowser را مشخص می‌کند.
ScrollBarsEnabled با تعیین یا برگرداندن یک مقدار نشان می‌دهد که آیا اسکرول بار در کنترل نمایش داده شده شود یا نه؟
Url برای تعیین یا برگرداندن آدرس سند جاری مورد استفاده قرار می‌گیرد.
Version نسخه Internet Explorer نصب شده را بر می‌گرداند.
متد توضیح
GoBack() در تاریخچه صفحات جستجو شده، به شما اجازه می‌دهد که به صفحه قبل بر گردید.
GoForward() در تاریخچه صفحات جستجو شده، به شما اجازه می‌دهد که به صفحه جلو بروید.
GoHome() کاربر را به صفحه اصلی می‌برد.
Navigate() یک سند جدید را بارگذاری می‌کند.
Stop() تمام مراحل پیمایش و بارگذاری صفحات پویا را لغو می‌کند.
رویداد توضیح
DocumentCompleted زمانی رخ می‌دهد که بارگذاری یک سند در WebBrowser به پایان رسیده باشد.
DocumentTitleChanged زمانی رخ می‌دهد که مقدار خاصیت DocumentTitle تغییر کند.
FileDownload زمانی رخ می‌دهد که کنترل WebBrowser یک فایل را دانلود کند.
Navigated زمانی رخ می‌دهد که کنترل WebBrowser یک سند جدید را پیمایش و بارگذاری آن را آغاز کرده باشد.
Navigating قبل از پیمایش یک سند جدید توسط کنترل WebBrowser رخ می‌دهد.
NewWindow قبل از باز شدن یک پنجره جدید از مرورگر رخ می‌دهد.

برای آشنایی با کاربرد موارد ذکر شده در جدول بالا یک برنامه ویندوزی به صورت زیر ایجاد کرده و نام آن را WebBrowserControl بگذارید :
web-browser-control-in-c#-01
بر روی دکمه Home دو بار کلیک کرده و کد زیر را در داخل آن بنویسید :

private void button1_Click(object sender, EventArgs e)
{
    webBrowser1.GoHome();
}

متد ()GoHome در کد بالا، به صفحه‌ای مراجعه می‌کند در مرورگر Internet Explorer ما به عنوان صفحه اصلی معرفی شده است :

web-browser-control-in-c#-02

web-browser-control-in-c#-03

یعنی هر بار که بر روی دکمه Home کلیک کنید صفحه گوگل باز می‌شود. حال بر روی دکمه Back دوبار کلیک کرده و کدهای زیر را بنویسید :

private void button2_Click(object sender, EventArgs e)
{
    if (webBrowser1.CanGoBack)
    {                         
        webBrowser1.GoBack(); 
    }                         
}

در کد بالا ابتدا در داخل شرط حلقه و با استفاده از خاصیت CanGoBack چک می‌کنیم که آیا صفحه‌ی قبلی هم وجود دارد. اگر وجود داشت، مرورگر را با استفاده از متد ()GoBack به آن انتقال می‌دهیم. برنامه را اجرا کرده و بر روی دکمه Home کلیک کنید. در داخل صفحه گوگل یک کلمه بنویسید و سپس روی دکمه Enter کلیک کنید. بعد از باز شدن صفحه جدید، اگر بر روی دکمه Back کلیک کنید. مشاهده می‌کنید که مرورگر به صفحه قبل که همان صفحه اصلی گوگل است بر می‌گردد. برای دکمه ForWard هم کد زیر را می‌نویسیم :

private void button3_Click(object sender, EventArgs e)
{
    if (webBrowser1.CanGoForward)
    {                            
        webBrowser1.GoForward(); 
    }                            
}

در کد بالا با استفاده از خاصیت CanGoForward چک می‌کنیم که آیا صفحه‌ی بعدی هم وجود دارد. اگر وجود داشت، مرورگر را با استفاده از متد ()GoForward به آن انتقال می‌دهیم. برای این کار ابتدا باید یک صفه جدید باز کنید و یک بار با دکمه Back رو به عقب بر گردید و سپس از دکمه ForWard استفاده کرده و تا عملکرد آن را مشاهده کنید. برای کدنویسی دکمه Refresh هم به صورت زیر عمل می‌کنید :

private void button4_Click(object sender, EventArgs e)
{
    webBrowser1.Refresh();
}

همانطور که در کد بالا مشاهده می‌کنید، از متد ()Refresh استفاده کرده‌ایم. این متد زمانی کارایی دارد که یک صفحه ناقص بارگذاری شده است و می‌خواهیم آن را دوباره نمایش دهیم. برای جلوگیری از بارگذاری یک صفحه هم از دکمه Stop استفاده می‌کنیم. برای کدنویی این دکمه دو بار بر روی آن کلیک کرده و متد ()Stop را فراخوانی کنید :

private void button5_Click(object sender, EventArgs e)
{
    webBrowser1.Stop();
}

و در آخر نوبت به کدنویسی دکمه Go می‌رسد. می‌خواهیم وقتی بر روی این دکمه کلیک شد، کنترل webBrowser سایتی که آدرس آن را در داخل TextBox نوشته‌ایم، را نمایش دهد. برای این منظور بر روی دکه Go دو بار کلیک کرده و کدهای زیر را در داخل آن بنویسید :

private void button6_Click(object sender, EventArgs e)
{
    webBrowser1.Navigate(textBox1.Text.Trim());
}

در کد بالا، ما متد ()Navigate این کنترل را فراخوانی کرده‌ایم. این متد یک رشته دریافت می‌کند که در اصل آدرس همان وب سایتی است که می‌خواهیم توسط webBrowser نمایش داده شود. آدرس یک وب سایت را در داخل TextBox نوشته و با کلیک بر روی دکمه Go نتیجه را مشاهده کنید. بر روی رویداد دوبار کلیک کرده و کدهای زیر را بنویسید :

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    this.Text = webBrowser1.DocumentTitle;
}

در کد بالا گفته‌ایم که وقتی صفحه به طور کامل بارگذاری شد، عنوان فرم را به عنوان صفحه‌ای که باز شده است تغییر بده. این کار را با استفاده از خاصیت DocumentTitle انجام داده‌ایم. برنامه را اجرا کرده و با کلیک بر روی دکمه Home نتیجه را مشاهده کنید :
web-browser-control-in-c#-04
حال به جای DocumentTitle، خاصیت DocumentType را بنویسید. این خاصیت نوع سندی که در داخل کنترل در حال نمایش است را بر می‌گرداند. با ماوس یک عکس به داخل کنترل بکشید و رها کنید :
web-browser-control-in-c#-05
بر روی فرم دوبار کلیک کرده و کد زیر را در داخل رویداد Load آن بنویسید :

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.AllowWebBrowserDrop = false;       
}

در کد بالا مقدار خاصیت AllowWebBrowserDrop را برابر false قرار داده‌ایم. حال اگر برنامه را اجرا کنید و بخواهید مثلاً یک عکس را از محیط ویندوز با ماوس بگیرید و در داخل کنترل webBrowser رها کنید به شما اجازه این کار داده نمی‌شود. حال خط بالا را پاک کرده و به جای آن کد زیر را در رویداد Load فرم بنویسید :

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.AllowNavigation = false;    
}

اگر مقدار خاصیت AllowNavigation برابر false باشد دکمه‌های Back و ForWard از کار می افتند. و به نوعی می‌توان گفت که بعد از باز شدن صفحه اول، اجازه باز شدن صفحات دیگر به شما داده نمی‌شود.