Aracılığıyla paylaş


İ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:

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'da Office Projeleri Oluşturma.

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

  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 Belgelerindeki Windows Forms Denetimlerine Genel Bakış

NamedRange Denetimi

ListObject Denetimi

Diğer Kaynaklar

Excel Çözümleri

Office Belgelerindeki Denetimler