İzlenecek Yol: Çalışma Zamanında Uygulama Düzeyi Projesindeki Çalışma Sayfasına Denetimler Ekleme
Excel eklentisi kullanarak herhangi bir açık çalışma sayfasına denetimler ekleyebilirsiniz.Bu anlatımda, Button, NamedRange ve ListObject'i belgeye eklemeyi sağlayan Şerit'in nasıl kullanıldığı gösterilir.Daha fazla bilgi için, bkz. Office Belgelerine Çalışma Zamanında Denetim Ekleme.
İçin geçerlidir: bu konudaki bilgiler Excel 2010 uygulamalarının uygulama düzeyi projelerine yöneliktir.Daha fazla bilgi için bkz. Office Uygulaması ve Proje Türüne Göre Kullanılabilir Özellikler.
Bu örneklerde aşağıdaki görevler gösterilir:
Çalışma sayfasına denetimler eklemek için kullanıcı arabirimi (UI) sağlama.
Çalışma sayfasına denetim ekleme.
Çalışma sayfasından denetimleri kaldırma.
[!NOT]
Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için, bkz. Visual Studio'da Geliştirme Ayarlarını özelleştirme.
Önkoşullar
Bu örneği tamamlamak için aşağıdaki bileşenler gerekmektedir:
Microsoft Office geliştirici araçlarını içeren bir Visual Studio 2013 sürümü. Daha fazla bilgi edinmek için, bkz. Office Çözümleri Geliştirmek İçin Bilgisayarı Yapılandırma.
Excel 2013 veya Excel 2010.
Yeni Excel Eklenti Projesi Oluşturma
Yeni bir Excel eklenti projesi oluşturarak başlayın.
Yeni Excel eklenti projesi oluşturmak için
İçinde Visual Studio, ExcelDinamikDenetimleri bir Excel eklenti projesi oluşturun.Daha fazla bilgi için bkz. Nasıl Yapılır: Visual Studio'da Office Projeleri Oluşturma.
Başvuru Ekle Microsoft.Office.Tools.Excel.v4.0.Utilities.dll derlemesi.Bu örnekte daha sonra çalışma sayfasına program aracılığıyla Windows Forms denetimi eklemek için bu başvuru gereklidir.
Çalışma Sayfasına Denetim Eklemek için Bir UI Sağlama
Şerite özel bir sekme ekleyin.Kullanıcılar çalışma sayfasına denetim eklemek için sekmedeki onay kutularını işaretleyebilir.
Çalışma sayfasına denetim eklemek üzere bir UI sağlamak için
Proje menüsünde, Yeni Öğe Ekle'yi tıklatın.
Yeni Öğe Ekle iletişim kutusunda, Şerit (Görsel Tasarımcı)'i seçin ve ardından Ekle'yi tıklatın.
Ribbon1.cs ya da Ribbon1.vb adındaki bir dosya Şerit Tasarımcısı'nda açılır ve varsayılan bir sekme ve grup görüntüler.
Araç Kutusu'nun Office Şerit Denetimleri sekmesinden group1'e bir CheckBox (onay kutusu) denetimi sürükleyin.
Seçmek için CheckBox1'e tıklatın.
Özellikler penceresindeki aşağıdaki özellikleri değiştirin.
Özellik
Value
Ad
Düğme
Etiket
Düğme
group1'e ikinci bir onay kutusu denetimi ekleyin ve aşağıdaki özellikleri değiştirin.
Özellik
Value
Ad
Adlandırılmış Aralık
Etiket
Adlandırılmış Aralık
group1'e üçüncü onay kutusu denetimini ekleyin ve aşağıdaki özellikleri değiştirin.
Özellik
Value
Ad
Liste Nesnesi
Etiket
Liste Nesnesi
Çalışma Sayfasına Denetim Ekleme
Yönetilen denetimler sadece kapsayıcı rolü alan konak öğelerine eklenebilir.Eklenti projeleri açık herhangi bir çalışma kitabıyla çalışabildiği için eklenti denetimi eklemeden çalışma sayfasını bir konak öğesine dönüştürür veya var olan bir konak öğesini alır.Her denetimin olay işleyicisine açık çalışma sayfasını temel alan bir Worksheet konak öğesi oluşturmak için kod ekleyin.Ardından, belgedeki geçerli seçime birer Button, NamedRange ve ListObject ekleyin.
Çalışma sayfasına denetim eklemek için
Şerit Tasarımcısı'nda Düğme'ye çift tıklayın.
Düğme onay kutusunun Click olay işleyicisi Kod Düzenleyici'sinde açılır.
Button_Click olay işleyicisini aşağıdaki kod ile değiştirin.
Bu kodda, çalışma kitabındaki ilk çalışma sayfasını temsil eden bir konak öğesini almak için GetVstoObject yöntemi kullanılır ve ardından geçerli hücre seçimine Button denetimi eklenir.
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) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) 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) { Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); 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); } }
Çözüm Gezgini içinde Ribbon1.cs veya Ribbon1.cs dosyasını seçin.
Görünüm menüsünden Tasarımcı'yı tıklatın.
Şerit Tasarımcısı'nda NamedRange'e (adlandırılmış aralık) çift tıklayın.
NamedRange_Click olay işleyicisini aşağıdaki kod ile değiştirin.
Bu kodda, çalışma kitabındaki ilk çalışma sayfasını temsil eden bir konak öğesini almak için GetVstoObject yöntemi kullanılır ve ardından geçerli hücre seçim(ler)i için bir NamedRange denetimi tanımlanır.
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) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) 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) { Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); 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); } }
Şerit Tasarımcısı'nda ListObject'i (liste nesnesi) çift tıklayın.
ListObject_Click olay işleyicisini aşağıdaki kod ile değiştirin.
Bu kodda, çalışma kitabındaki ilk çalışma sayfasını temsil eden bir konak öğesini almak için GetVstoObject yöntemi kullanılır ve ardından geçerli hücre seçim(ler)i için bir ListObject denetimi tanımlanır.
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) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) 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) { Worksheet worksheet = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); 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); } }
Şerit kod dosyanın en üstüne aşağıdaki deyimleri ekleyin.
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;
Çalışma Sayfasından Denetimleri Kaldırma
Çalışma sayfası kaydedilip kapatıldığında denetimler kalıcı olmaz.Çalışma sayfası kaydedilmeden önce tüm oluşturulmuş Windows Forms denetimlerini program aracılığıyla kaldırmalısınız, aksi takdirde çalışma kitabı tekrar açıldığında denetimin anahattı görünür.WorkbookBeforeSave olayına oluşturulmuş konak öğesinin denetim koleksiyonundan Windows Forms denetimlerini kaldıran kod ekleyiniz.Daha fazla bilgi için bkz. Office Belgelerinde Dinamik Denetimleri Kalıcı Kılma.
Çalışma sayfasından denetimleri kaldırmak için
Çözüm Gezgini içinde ThisAddIn.cs veya ThisAddIn.cs dosyasını seçin.
View menüsünde Code'u tıklayın.
Aşağıdaki yöntemi ThisAddIn sınıfına ekleyin.Bu kod çalışma kitabındaki ilk çalışma sayfasını alır ve ardından bu sayfanın oluşturulmuş bir worksheet (çalışma sayfası) nesnesi olup olmadığına bakmak için HasVstoObject yöntemini kullanır.Oluşturulmuş worksheet nesnesinin denetimleri varsa kod o worksheet nesnesini alır ve denetim koleksiyonunu denetimleri kaldırarak dolaşır.
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) If Globals.Factory.HasVstoObject(worksheet) And Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet) 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; if (Globals.Factory.HasVstoObject(worksheet) && Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0) { Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet); while (vstoWorksheet.Controls.Count > 0) { object vstoControl = vstoWorksheet.Controls[0]; vstoWorksheet.Controls.Remove(vstoControl); } } }
C#'ta WorkbookBeforeSave olayı için olay işleyicisi oluşturmalısınız. Bu kodu ThisAddIn_Startup yöntemine yerleştirebilirsiniz.Olay işleyicisi oluşturma hakkında daha fazla bilgi için, bkz. Nasıl Yapılır: Office Projelerinde Olay İşleyicileri Oluşturma.ThisAddIn_Startup yöntemini aşağıdaki kod ile değiştirin.
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler (Application_WorkbookBeforeSave); }
Çözümün Sınanması
Çalışma sayfasına denetimleri Şerit üzerindeki özel bir sekmeden seçerek ekleyin.Çalışma sayfasını kaydettiğinizde bu denetimler kaldırılır.
Çözümü test etmek için
F5 tuşuna basarak projeyi çalıştırın.
Sheet1'deki herhangi bir hücreyi seçin.
Eklentiler sekmesine tıklayın.
group1 grubunda Düğme'yi tıklatın.
Seçili hücrede bir düğme görünür.
Sheet1'de başka bir hücreyi seçin.
group1 grubunda NamedRange'i (adlandırılmış aralık) tıklatın.
Seçili hücre için bir adlandırılmış aralık tanımlanır.
Sheet1'de bir hücre öbeği seçin.
group1 grubunda ListObject'i (liste nesnesi) tıklatın.
Seçili hücreler için bir liste nesnesi eklenir.
Çalışma sayfasını kaydedin.
Sheet1'e eklediğiniz denetimler artık görünmez.
Sonraki Adımlar
Excel eklenti projelerinde denetimler hakkında daha fazla bilgiyi şu konudan öğrenebilirsiniz:
- Bir çalışma sayfasına denetimlerin nasıl kaydedildiğini öğrenmek için Office Geliştirme Örnekleri ve İzlenecek Yollar bağlantısındaki Excel Eklentisi Dinamik Denetimler Örneği'ne bakınız.
Ayrıca bkz.
Kavramlar
Office Belgelerindeki Windows Forms Denetimlerine Genel Bakış