كيفية القيام بما يلي: تنفيذ اتصال Two-Way بين رمز DHTML والتعليمات البرمجية لتطبيق عميل
يمكنك استخدام عنصر تحكم WebBrowser لإضافة رمز تطبيق ويب (HTML (DHTML حيوي قائم على تشغيل تطبيقات العميل Windows Forms الخاصة بك. وذلك يكون مفيداً عندما تستثمر وقت التطور في إنشاء عناصر القائمة على DHTML وتريد الاستفادة من قدرات واجهة المستخدم Windows Forms الغنية دون الحاجة إلى إعادة كتابة التعليمات البرمجية الموجودة.
يسمح لك عنصر تحكم WebBrowser بتنفيذ اتصال ثنائي الاتجاه بين تعليمات تطبيق العميل الخاص بك البرمجية و رمز البرمجة النصية لصفحة الويب عبر خصائص ObjectForScripting و Document خصائص. بالإضافة إلى ذلك، يمكنك تكوين عنصر التحكم WebBrowser بحيث يندمج عنصر تحكم الويب الخاص بك مع عناصر تحكم أخرى على نموذج الطلب, خافيين تطبيقات DHTML الخاصة بهم. لمزج عناصر التحكم بسلاسة، عليك بتنسيق الصفحة المعروضة بحيث يكون لون خلفيتها و نمطها المرئي يتطابقان مع باقي النموذج، واستخدام خصائص AllowWebBrowserDrop, IsWebBrowserContextMenuEnabled، و WebBrowserShortcutsEnabled لتعطيل الميزات القياسية المستعرضة.
لتضمين DHTML في تطبيق Windows Forms الخاص بك
عيين خاصية WebBrowser الخاصه بعنصر تحكم AllowWebBrowserDrop لـ false لمنع عنصر التحكم WebBrowser من فتح الملفات الساقطة عليه.
webBrowser1.AllowWebBrowserDrop = False
webBrowser1.AllowWebBrowserDrop = false;
عيين خاصية IsWebBrowserContextMenuEnabled الخاصة بعنصر تحكم false لمنع عنصر تحكم WebBrowser من عرض اختصار قائمته عندما يقوم المستخدم بالنقر بزر الماوس الأيمن عليه.
webBrowser1.IsWebBrowserContextMenuEnabled = False
webBrowser1.IsWebBrowserContextMenuEnabled = false;
تعيين خاصية WebBrowserShortcutsEnabled الخاصة بعنصر التحكم إلى false لمنع عنصر التحكم WebBrowser من الاستجابة إلى مفاتيح الاختصار.
webBrowser1.WebBrowserShortcutsEnabled = False
webBrowser1.WebBrowserShortcutsEnabled = false;
قم بتعيين خاصية ObjectForScripting في مُنشئ الخاص بنموذج أو معالج الأحداث Load.
ويستخدم التعليمات البرمجية التالية فئة النموذج نفسه للكائن البرمجة.
ملاحظة
طراز كائن المكون (COM) يجب أن يكون قادراً على الوصول إلى كائن البرمجة. لجعل نموذجك مرئي لـ COM, قم بإضافة سمة ComVisibleAttribute إلى فئة النموذج.
webBrowser1.ObjectForScripting = Me
webBrowser1.ObjectForScripting = this;
تنفيذ الأساليب أو الخصائص العمومية في التعليمات البرمجية للتطبيق الذي سوف يستخدمه رمز برنامجك النصي.
على سبيل المثال، إذا كنت تستخدم فئة نموذج كائن البرمجة، أضف التعليمة البرمجية التالية إلى فئة النموذج الخاص بك.
Public Sub Test(ByVal message As String) MessageBox.Show(message, "client code") End Sub
public void Test(String message) { MessageBox.Show(message, "client code"); }
استخدم كائن window.external في تعليمات برنامجك النصي البرمجية للوصول إلى الخصائص العامة و أساليب محددة خاصة بالكائن.
مثال تعليمات HTML البرمجية التالية توضح كيفية استدعاء أسلوب على كائن البرمجة النصية من نقرة زر. انسخ هذه التعليمات البرمجية في عنصر BODY في مستند HTML الذي قمت بتحميله باستخدام إسلوب عنصر تحكم Navigate أو الذي قمت بتعيينه إلى خاصية عنصر تحكم DocumentText.
<button onclick="window.external.Test('called from script code')"> call client code from script code </button>
زود تعليمات برنامجك النصي البرمجية بالمهام التي ستستخدمها تعليماتك البرمجية.
يوفر عنصر البرنامج النصي HTML التالي مثال عن الدالة. انسخ هذه التعليمات البرمجية في عنصر HEAD في مستند HTML الذي قمت بتحميله باستخدام إسلوب عنصر تحكم Navigate أو الذي قمت بتعيينه إلى خاصية عنصر تحكم DocumentText.
<script> function test(message) { alert(message); } </script>
استخدم خاصية Document للوصول إلى التعليمات البرمجية للبرنامج النصي من تعليمات تطبيق العميل البرمجية الخاصة بك.
على سبيل المثال, قم بإضافة التعليمات البرمجية التالية إلى زر معالج الأحداث Click.
webBrowser1.Document.InvokeScript("test", _ New String() {"called from client code"})
webBrowser1.Document.InvokeScript("test", new String[] { "called from client code" });
عند الانتهاء من تصحيح DHTML الخاص بك, قم بتعيين خاصية عنصر تحكم ScriptErrorsSuppressed إلى true لمنع عنصر تحكم WebBrowser من عرض رسائل الخطأ لمشاكل تعليمات البرنامج النصية.
' Uncomment the following line when you are finished debugging. 'webBrowser1.ScriptErrorsSuppressed = True
// Uncomment the following line when you are finished debugging. //webBrowser1.ScriptErrorsSuppressed = true;
مثال
يوفر المثال التعليمات البرمجية التالي نموذج عرض توضيحي عن التطبيق يمكنك استخدامه لفهم هذه ميزة أكثر. يتم تحميل التعليمات البرمجية إلى عنصر تحكم WebBrowser من خلال خاصية DocumentText بدلاً من تحميلها من ملف HTML منفصل.
Imports System
Imports System.Windows.Forms
Imports System.Security.Permissions
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class Form1
Inherits Form
Private webBrowser1 As New WebBrowser()
Private WithEvents button1 As New Button()
<STAThread()> _
Public Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Public Sub New()
button1.Text = "call script code from client code"
button1.Dock = DockStyle.Top
webBrowser1.Dock = DockStyle.Fill
Controls.Add(webBrowser1)
Controls.Add(button1)
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles Me.Load
webBrowser1.AllowWebBrowserDrop = False
webBrowser1.IsWebBrowserContextMenuEnabled = False
webBrowser1.WebBrowserShortcutsEnabled = False
webBrowser1.ObjectForScripting = Me
' Uncomment the following line when you are finished debugging.
'webBrowser1.ScriptErrorsSuppressed = True
webBrowser1.DocumentText = _
"<html><head><script>" & _
"function test(message) { alert(message); }" & _
"</script></head><body><button " & _
"onclick=""window.external.Test('called from script code')"" > " & _
"call client code from script code</button>" & _
"</body></html>"
End Sub
Public Sub Test(ByVal message As String)
MessageBox.Show(message, "client code")
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles button1.Click
webBrowser1.Document.InvokeScript("test", _
New String() {"called from client code"})
End Sub
End Class
using System;
using System.Windows.Forms;
using System.Security.Permissions;
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class Form1 : Form
{
private WebBrowser webBrowser1 = new WebBrowser();
private Button button1 = new Button();
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
public Form1()
{
button1.Text = "call script code from client code";
button1.Dock = DockStyle.Top;
button1.Click += new EventHandler(button1_Click);
webBrowser1.Dock = DockStyle.Fill;
Controls.Add(webBrowser1);
Controls.Add(button1);
Load += new EventHandler(Form1_Load);
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.WebBrowserShortcutsEnabled = false;
webBrowser1.ObjectForScripting = this;
// Uncomment the following line when you are finished debugging.
//webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.DocumentText =
"<html><head><script>" +
"function test(message) { alert(message); }" +
"</script></head><body><button " +
"onclick=\"window.external.Test('called from script code')\">" +
"call client code from script code</button>" +
"</body></html>";
}
public void Test(String message)
{
MessageBox.Show(message, "client code");
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.InvokeScript("test",
new String[] { "called from client code" });
}
}
التحويل البرمجي للتعليمات البرمجية
يتطلب مثال التعليمات البرمجية :
- مراجع عن تجميعات النظام و تجميعات System.Windows.Forms.
للحصول على المزيد من المعلومات حول إنشاء هذا المثال من خط أوامر Visual Basic أو #Visual C، راجع الإنشاء من سطر الأوامر (Visual Basic) أو إنشاء سطر الأوامر باستخدام csc.exe. يمكنك أيضاً بناء هذا المثال في Visual Studio عن طريق لصق التعليمات البرمجية في مشروع جديد. لمزيد من المعلومات، راجع: كيفية القيام بما يلي: ترجمة و تشغيل مثال التعليمات برمجية لنماذج Windows الكامل باستخدام Visual Studio.