الإرشادات التفصيلية: إضافة عناصر تحكم إلى ورقة عمل في وقت التشغيل في مشروع على مستوى التطبيق
ينطبق على |
---|
تنطبق المعلومات الموجودة في هذا الموضوع فقط على أنواع المشاريع وإصدارات Microsoft Office التالية: لمزيد من المعلومات، راجع الميزات المتوفرة بواسطة تطبيقات Office و نوع المشروع. نوع المشروع
إصدار Microsoft Office
|
يمكنك إضافة عدد من الأوامر القوائم مختلفة أو عناصر التحكم إلى اختصار القائمة. This walkthrough demonstrates how to use the Ribbon to enable users to add a Button, a NamedRange, and a ListObject to a worksheet.
لمزيد من المعلومات، راجع إضافة عناصر تحكم إلى مستندات Office في وقت التشغيل.
توضح هذه الإرشادات التفصيلية المهام التالية:
توفير واجهة مستخدم (UI) لإضافة عناصر تحكم إلى ورقة العمل.
إضافة عناصر تحكم إلى ورقة العمل.
إزالة عناصر تحكم من ورقة العمل .
ملاحظة
قد يعرض جهاز الكمبيوتر الخاص بك أسماء أو مواقع مختلفة لبعض عناصر واجهة مستخدم Visual Studio في الإرشادات التالية. يحدد كل من إصدار Visual Studio لديك والإعدادات المستخدمة هذه العناصر. لمزيد من المعلومات، راجع العمل مع إعدادات.
المتطلبات الأساسية
تحتاج إلى المكونات التالية لاستكمال هذه الإرشادات التفصيلية:
-
إصدار لـ Visual Studio 2010 يشمل أدوات مطوري Microsoft Office. لمزيد من المعلومات، راجع [تكوين كمبيوتر لتطوير حلول Office](bb398242\(v=vs.100\).md).
- Microsoft Office Excel 2007 أو Excel 2010.
إنشاء مشروع وظيفة Excel إضافية جديد
ابدأ بإنشاء مشروع وظيفة Excel إضافية.
لإنشاء مشروع وظيفة إضافية Excel جديد
بواسطة استخدام طراز الكائن شريط الأوامر.Visual Studio
في مربع الحوار مشروع جديد، حدد إنشاء دليل للحل.
قم بحفظ المشروع إلى أي موقع .
لمزيد من المعلومات، راجع كيفية القيام بما يلي: إنشاء مشاريع Office في Visual Studio.
توفير واجهة مستخدم لإضافة عناصر تحكم إلى ورقة العمل .
إضافة علامة تبويب مخصصة إلى شريط Excel. يمكن للمستخدمين تحديد خانات الاختيار ضمن علامة التبويب لإضافة عناصر تحكم إلى ورقة عمل.
توفير واجهة مستخدم لإضافة عناصر تحكم إلى ورقة العمل .
في مشروع قائمة ، انقر فوق إضافة عنصر جديد .
في مربع الحوار إضافة عنصر جديد، حدد **الشريط (مصمم مرئى)**ثم انقر فوق أضف .
يتم فتح ملف يسمى Ribbon1.cs أو Ribbon1.vb في مصمم الشريط ويعرض المجموعة و التبويب الافتراضيين .
من التبويب عناصر تحكم شريط Office من مربع الأدوات، اسحب عنصر تحكم مربع اختيار (CheckBox) إلى group1 .
انقر فوق CheckBox1 لتحديده .
في النافذة خصائص ، قم بتغيير الخصائص التالية.
الخصائص
Value
الاسم
الزر
Label
الزر
قم بإضافة مربع الاختيار الثاني إلى group1 ثم قم بتغيير الخصائص التالية.
الخصائص
Value
الاسم
NamedRange
Label
NamedRange
قم بإضافة مربع الاختيار الثالث إلى group1 ثم قم بتغيير الخصائص التالية.
الخصائص
Value
الاسم
ListObject
Label
ListObject
إضافة عناصر تحكم إلى ورقة العمل.
يمكن إضافة عناصر التحكم المدارة فقط للعناصر المضيفة التي تعمل كحاويات. لأن الوظيفة الإضافية في المشاريع تعمل مع أي مصنف مفتوح ، فإن الوظيفة الإضافية تحول ورقة العمل إلى عنصر مضيف أو تحصل على عنصر مضيف موجود قبل إضافة عنصر التحكم. قم بإضافة التعليمات البرمجية لمعالجات أحداث النقر لكل عنصر تحكم لإنشاء العنصر المضيف Worksheet الذي يعتمد على ورقة عمل مفتوحة. ثم، قم بإضافة Button ، و NamedRange ، و ListObject في التحديد الحالي في ورقة العمل.
لإضافة عناصر تحكم إلى ورقة عمل.
في "مصمم" الشريط "، انقر نقراً مزدوجاً فوق زر (Button) .
معالج الأحداث Click لخانة الاختيار الزر يقوم بالفتح في محرر التعليمات البرمجية.
قم باستبدال معالج الأحداث Button_Click بالتعليمات البرمجية التالية.
تستخدم هذه التعليمة البرمجية الأسلوب GetVstoObject للحصول على عنصر مضيف يمثل أول ورقة عمل في المصنف ثم تضيف عنصر التحكم Button إلى الخلية المحددة حالياً .
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles Button.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) ' Use the following line of code in projects that target the .NET Framework 4. Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ ' Excel.Worksheet).GetVstoObject() Dim buttonName As String = "MyButton" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim button As New Microsoft.Office.Tools.Excel.Controls.Button() worksheet.Controls.AddControl(button, selection, buttonName) End If Else worksheet.Controls.Remove(buttonName) End If End Sub
private void Button_Click(object sender, RibbonControlEventArgs e) { // Use the following line of code in projects that target the .NET Framework 4. Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); // In projects that target the .NET Framework 3.5, use the following line of code. // Worksheet worksheet = // ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]).GetVstoObject(); string buttonName = "MyButton"; if (((RibbonCheckBox)sender).Checked) { Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; if (selection != null) { Microsoft.Office.Tools.Excel.Controls.Button button = new Microsoft.Office.Tools.Excel.Controls.Button(); worksheet.Controls.AddControl(button, selection, buttonName); } } else { worksheet.Controls.Remove(buttonName); } }
في مستكشف الحلول ، حدد Ribbon1.cs أو Ribbon1.vb.
في القائمة View (عرض)، انقر فوق Designer (مصمم).
في "مصمم" الشريط "، انقر نقراً مزدوجاً فوق نطاق مسمي (NamedRange) .
قم باستبدال معالج الأحداث NamedRange_Click بالتعليمات البرمجية التالية.
تستخدم هذه التعليمة البرمجية الأسلوب GetVstoObject للحصول على عنصر مضيف يمثل أول ورقة عمل في المصنف ثم تقوم بتعريف عنصر التحكم NamedRange للخلية أو الخلايا المحددة حالياً .
Private Sub NamedRange_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles NamedRange.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) ' Use the following line of code in projects that target the .NET Framework 4. Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ ' Excel.Worksheet).GetVstoObject() Dim rangeName As String = "MyNamedRange" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim namedRange As NamedRange = _ worksheet.Controls.AddNamedRange(selection, rangeName) End If Else worksheet.Controls.Remove(rangeName) End If End Sub
private void NamedRange_Click(object sender, RibbonControlEventArgs e) { // Use the following line of code in projects that target the .NET Framework 4. Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); // In projects that target the .NET Framework 3.5, use the following line of code. // Worksheet worksheet = // ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]).GetVstoObject(); string Name = "MyNamedRange"; if (((RibbonCheckBox)sender).Checked) { Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; if (selection != null) { worksheet.Controls.AddNamedRange(selection, Name); } } else { worksheet.Controls.Remove(Name); } }
في "مصمم" الشريط "، انقر نقراً مزدوجاً فوق كائن القائمة ListObject .
قم باستبدال معالج الأحداث ListObject_Click بالتعليمات البرمجية التالية.
تستخدم هذه التعليمة البرمجية الأسلوب GetVstoObject للحصول على عنصر مضيف يمثل أول ورقة عمل في المصنف ثم تقوم بتعريف ListObject للخلية أو الخلايا المحددة حالياً .
Private Sub ListObject_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles ListObject.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) ' Use the following line of code in projects that target the .NET Framework 4. Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) ' In projects that target the .NET Framework 3.5, use the following line of code. ' Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ ' Excel.Worksheet).GetVstoObject() Dim listObjectName As String = "MyListObject" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = _ Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then worksheet.Controls.AddListObject(selection, listObjectName) End If Else worksheet.Controls.Remove(listObjectName) End If End Sub
private void ListObject_Click(object sender, RibbonControlEventArgs e) { // Use the following line of code in projects that target the .NET Framework 4. Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); // In projects that target the .NET Framework 3.5, use the following line of code. // Worksheet worksheet = // ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]).GetVstoObject(); string listObjectName = "MyListObject"; if (((RibbonCheckBox)sender).Checked) { Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; if (selection != null) { worksheet.Controls.AddListObject(selection, listObjectName); } } else { worksheet.Controls.Remove(listObjectName); } }
قم بإضافة العبارات التالية لأعلى ملف التعليمة البرمجية للشريط.
Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Tools.Excel Imports Microsoft.Office.Tools.Excel.Extensions
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Tools.Excel; using Microsoft.Office.Tools.Excel.Extensions;
إزالة عناصر تحكم من ورقة العمل .
لا تظل عناصر التحكم باقية عند حفظ ورقة العمل وإغلاقها . ينبغي عليك برمجياً إزالة كافة عناصر تحكم Windows Forms المنشأة قبل حفظ ورقة العمل و إلا فسيظهر مخطط تفصيلي فقط لعنصر التحكم عند فتح المصنف مرة أخرى. قم بإضافة التعليمات البرمجية إلى الحدث WorkbookBeforeSave الذي يقوم بإزالة عناصر تحكم Windows Forms من مجموعة عناصر التحكم للعنصر المضيف الذي تم إنشاؤه. لمزيد من المعلومات، راجع استمرارية عناصر التحكم الديناميكي في مستندات Office.
لإزالة عناصر تحكم من ورقة العمل .
في مستكشف الحلول حدد ThisAddIn.cs أو ThisAddIn.vb.
في القائمة عرض، انقر فوق تعليمات برمجية.
قم بإضافة الأسلوب التالي إلى الفئة ThisAddIn . تحصل هذه التعليمات البرمجية على ورقة العمل الأولى في المصنف ثم تستخدم الأسلوب HasVstoObject للتحقق مما إذا كان لدى ورقة العمل كائن ورقة عمل تم إنشاؤه. إذا كان كائن ورقة العمل الذي تم إنشاؤه يحتوي على عناصر تحكم ، تحصل التعليمات البرمجية على كائن ورقة العمل و تقوم بالتكرار عبر مجموعة عناصر تحكم ، مزيلة بذلك عناصر التحكم.
Sub Application_WorkbookBeforeSave _ (ByVal workbook As Microsoft.Office.Interop.Excel.Workbook, _ ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) _ Handles Application.WorkbookBeforeSave Dim worksheet As Excel.Worksheet = workbook.Worksheets(1) ' Use the following code in projects that target the .NET Framework 4. If Globals.Factory.HasVstoObject(worksheet) And Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet) ' In projects that target the .NET Framework 3.5, use the following code. ' If worksheet.HasVstoObject() And worksheet.GetVstoObject().Controls.Count > 0 Then ' Dim vstoWorksheet As Worksheet = worksheet.GetVstoObject() While vstoWorksheet.Controls.Count > 0 Dim vstoControl As Object = vstoWorksheet.Controls(0) vstoWorksheet.Controls.Remove(vstoControl) End While End If End Sub
void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, bool SaveAsUI, ref bool Cancel) { Excel.Worksheet worksheet = workbook.Worksheets[1] as Excel.Worksheet; // Use the following lines of code in projects that target the .NET Framework 4. if (Globals.Factory.HasVstoObject(worksheet) && Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0) { Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet); // In projects that target the .NET Framework 3.5, use the following line of code. // if (worksheet.HasVstoObject() && worksheet.GetVstoObject().Controls.Count > 0) // { // Worksheet vstoWorksheet = worksheet.GetVstoObject(); while (vstoWorksheet.Controls.Count > 0) { object vstoControl = vstoWorksheet.Controls[0]; vstoWorksheet.Controls.Remove(vstoControl); } } }
في #C، يجب أن تقوم بإنشاء معالج حدث للحدث WorkbookBeforeSave. يمكنك وضع هذه التعليمات البرمجية في أسلوب ThisAddIn_Startup. للحصول على مزيد من المعلومات حول إنشاء معالجات أحداث راجع كيفية القيام بما يلي: إنشاء معالجات أحداث في مشاريع Office. قم باستبدال الأسلوب ThisAddIn_Startup كما في التعليمات البرمجية التالية.
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler (Application_WorkbookBeforeSave); }
اختبار الحل
قم بإضافة عناصر التحكم إلى ورقة العمل بواسطة تحديدها من علامة التبويب المخصصة على الشريط. عندما تقوم بحفظ ورقة العمل, يتم إزالة عناصر التحكم هذه.
لاختبار الحل.
اضغط F5 لتشغيل مشروعك.
حدد أي خلية في Sheet1.
انقر فوق علامة التبويب الوظائف الإضافية (Add-Ins).
في المجموعة group1 ، انقر فوق زر .
يظهر زر في الخلية المحددة .
حدد خلية مختلفة في Sheet1.
في المجموعة group1 انقر فوق NamedRange.
يتم تعريف نطاق مسمى للخلية المحددة.
حدد سلسلة من الخلايا في Sheet1.
في المجموعة group1 انقر فوق ListObject.
تتم إضافة كائن قائمة للخلايا المحددة.
احفظ ورقة العمل.
لم تعد عناصر التحكم التي قمت بإضافتها إلى Sheet1 تظهر.
الخطوات التالية
يمكنك معرفة المزيد حول عناصر التحكم في مشاريع الوظيفة الإضافية الخاصة بــ Excel من هذا الموضوع:
- للحصول على المزيد حول كيفية حفظ عناصر التحكم إلى ورقة العمل ، راجع نماذج عناصر التحكم الحيوية الخاصة بوظيفة Excel الإضافية الخاصة في نماذج تطوير Office وإرشادات تفصيلية.
راجع أيضًا:
المبادئ
استخدام عناصر تحكم Windows Forms في أوراق عمل Excel