Aracılığıyla paylaş


İzlenecek yol: Uygulama düzeyinde projesinde çalışma zamanında bir çalışma denetimleri 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. Belgeye Ç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 Uygulamalarında Kullanılabilir Özellikler ve Proje Türü.

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ızda, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazılarının adı veya konumu farklı gösterilebilir. Bu öğeleri bilgisayarınızdaki Visual Studio sürümü ve kullandığınız ayarlar belirler. Daha fazla bilgi için bkz: Visual Studio ayarları.

Ö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 2012 sürümü. Daha fazla bilgi için bkz: [Office Çözümeri Geliştirmek İçin Bilgisayarı Yapılandırma](bb398242\(v=vs.110\).md).
  • 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

  1. İçinde Visual Studio, ExcelDinamikDenetimleri bir Excel eklenti projesi oluşturun.Daha fazla bilgi için bkz. Nasıl yapılır: Visual Studio Office projeler oluşturmak.

  2. 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

  1. Proje menüsünde, Yeni Öğe Ekle'yi tıklatın.

  2. 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.

  3. Araç Kutusu'nun Office Şerit Denetimleri sekmesinden group1'e bir CheckBox (onay kutusu) denetimi sürükleyin.

  4. Seçmek için CheckBox1'e tıklatın.

  5. Özellikler penceresindeki aşağıdaki özellikleri değiştirin.

    Özellik

    Value

    Ad

    Düğme

    Etiket

    Düğme

  6. 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

  7. 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

  1. Ş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.

  2. 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);
        }
    }
    
  3. Çözüm Gezgini içinde Ribbon1.cs veya Ribbon1.cs dosyasını seçin.

  4. Görünüm menüsünden Tasarımcı'yı tıklatın.

  5. Şerit Tasarımcısı'nda NamedRange'e (adlandırılmış aralık) çift tıklayın.

  6. 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);
        }
    }
    
  7. Şerit Tasarımcısı'nda ListObject'i (liste nesnesi) çift tıklayın.

  8. 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);
        }
    }
    
  9. Ş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

  1. Çözüm Gezgini içinde ThisAddIn.cs veya ThisAddIn.cs dosyasını seçin.

  2. View menüsünde Code'u tıklayın.

  3. 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);
            }
    
        }
    }
    
  4. 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: olay işleyicileri Office projelerinin.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

  1. F5 tuşuna basarak projeyi çalıştırın.

  2. Sheet1'deki herhangi bir hücreyi seçin.

  3. Eklentiler sekmesine tıklayın.

  4. group1 grubunda Düğme'yi tıklatın.

    Seçili hücrede bir düğme görünür.

  5. Sheet1'de başka bir hücreyi seçin.

  6. 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.

  7. Sheet1'de bir hücre öbeği seçin.

  8. group1 grubunda ListObject'i (liste nesnesi) tıklatın.

    Seçili hücreler için bir liste nesnesi eklenir.

  9. Ç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:

Ayrıca bkz.

Kavramlar

Office Belgerindeki Windows Forms Denetimlerine Genel Bakış

NamedRange Denetimi

ListObject Denetimi

Diğer Kaynaklar

Excel Çözümleri

Office Belgeleri Üzerinde Denetimler