Aracılığıyla paylaş


Web Performans Test Sonuçları Görüntüleyicisi için bir Visual Studio Eklentisi Nasıl Oluşturulur

Aşağıdaki ad alanlarını kullanarak için Web Performans Test Sonuçları Görüntüleyicisi için UI'ı genişletebilirsiniz:

Ayrıca, %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies klasöründe bulunan LoadTestPackage dll için referans eklemeniz gerekir.

  • Web Başarım Test Sonuçları Görüntüleyicisi'nin Kullanıcı Arabirimi'ni genişletmek için bir Visual Studio eklentisi ve bir kullanıcı denetimi oluşturmanız gerekir. Aşağıdaki yordamlar eklenti ve kullanıcı denetiminin nasıl oluşturulduğunu ve Web Performans Test Sonuçları Görüntüleyicisi'nin Kullanıcı Arabirimi'ni genişletmek için gerekli sınıfların nasıl uygulanacağını açıklar.

Gereksinimler

  • Visual Studio Ultimate

Bir asp.net Web uygulaması ve Web başarım ve Yük Test projesi içeren bir çözüm açın veya oluşturun

Web Başarım Test Sonuçları Görüntüleyicisi'ni genişletmek üzere hazırlanmak için

Visual Studio Eklentisi Oluşturma

Eklenti, Visual Studio tümleşik geliştirme ortamında (IDE) çalışan derlenmiş bir DLL'dir. Derleme fikri mülkiyetinizi korumanıza yardımcı olur ve performansı geliştirir. Her ne kadar, eklentileri elle oluşturabilseniz de, Eklenti Sihirbazı'nı kullanmayı daha kolay bulabilirsiniz. Bu sihirbaz oluşturur oluşturmaz çalıştırabileceğiniz işlevsel fakat basit bir eklenti oluşturur. Eklenti Sihirbazı temel programı oluşturduktan sonra, ona kod ekleyebilir ve onu özelleştirebilirsiniz.

Eklenti Sihirbazı, eklentiniz için bir görünen ad ve açıklama sağlamanıza olanak tanır. Her ikisi de Eklenti Yöneticisi'nde görünecektir. İsteğe bağlı olarak, sihirbazın eklentiyi açmak için Araçlar menüsüne komut ekleyen kodu oluşturmasını sağlayabilirsiniz. Ayrıca, eklentiniz için özel bir Hakkında iletişim kutusu görüntülemeyi tercih edebilirsiniz. Sihirbaz sona erdiğinde, eklentiyi uygulayan yalnızca bir sınıfı olan yeni bir proje vardır. Bu sınıf, Bağlan olarak adlandırılır.

Bu konunun sonundaki Eklenti Yöneticisi'ni kullanacaksınız.

Daha fazla bilgi için bkz. Eklentiler ve sihirbazlar oluşturma.

Eklenti Sihirbazı'nı kullanarak bir eklenti oluşturmak için

  1. Çözüm Gezgini'nde, çözüm üzerinde sağ tıklayın, seçim Ekle seçip Yeni bir proje.

    Yeni Proje iletişim kutusu görüntülenir.

  2. Yüklü Şablonlar altında Diğer Proje Türleri'ni genişletin ve Genişletilebilirlik'i seçin.

  3. Şablon listesinde Visual Studio Eklentisi'ni seçin.

  4. Ad altına eklenti için bir ad yazın. Örneğin, WebPerfTestResultsViewerAddin.

  5. Tamam'ı seçin.

    Visual Studio Eklenti Sihirbazı başlatılır.

  6. İleri öğesini seçin.

  7. Bir programlama dili seç sayfasında, eklentiyi yazmak için kullanmak istediğiniz programlama dilini seçin.

    Not

    Bu konu örnek kod için Visual C# kullanmaktadır.

  8. Üzerinde Seçin uygulama ana bilgisayarı seçin, sayfa Visual Studio ve Visual Studio Macros.

  9. İleri öğesini seçin.

  10. Bir Ad ve Açıklama Girin sayfasında eklentinizin adını ve açıklamasını yazın.

    Eklenti oluşturulduktan sonra, adı ve açıklaması Eklenti Yöneticisi'ndeki Kullanılabilir Eklentiler listesinde görüntülenir. Kullanıcıların eklentinizle ilgili olarak ne işe yaradığını, nasıl çalıştığını vs. öğrenmesi için eklentinizin açıklamasına yeterli ayrıntı ekleyin.

  11. İleri öğesini seçin.

  12. Eklenti Seçeneklerini Belirle sayfasında, Eklentimin ana bilgisayar uygulaması başladığında yüklenmesini istiyorum öğesini seçin.

  13. Geri kalan onay kutularını temizleyin.

  14. 'Yardım Konusu' Bilgilerini Seçme sayfasında, eklentinize ilişkin bilgilerin Hakkında iletişim kutusunda gösterilmesini isteyip istemediğinizi belirtebilirsiniz. Bilgilerin görüntülenmesini isterseniz Evet, Eklentimin 'Hakkında' kutusu bilgisi sunmasını istiyorum onay kutusunu seçin.

    Visual StudioHakkında iletişim kutusuna eklenebilen bilgi sürüm numarası, destek ayrıntıları, lisans verileri vb.içerir.

  15. İleri öğesini seçin.

  16. Seçtiğiniz seçenekler gözden geçirmeniz için Özet sayfasında görüntülenir. Memnun kaldığınızda Son eklenti oluşturmak için. Bir şey değiştirmek istiyorsanız, seçim geri düğmesi.

    Yeni çözüm ve proje oluşturulur ve yeni eklenti için Connect.cs dosyası Kod Düzenleyicisi'nde görüntülenir.

    Bu WebPerfTestResultsViewerAddin projesi tarafından başvurulacak olan kullanıcı denetimi oluşturan aşağıdaki yordamlardan sonra Connect.cs dosyasına kod ekleyeceksiniz.

Bir eklenti oluşturulduktan sonra, onu Eklenti Yöneticisi'nde etkinleştirilmeden önce Visual Studio belirtecine kaydetmelisiniz. .addin dosya adı uzantısına sahip bir XML dosyası kullanarak bunu yapın.

.addin dosyası, Visual Studio uygulamasının eklentileri Add-In Managerda görüntüleyebilmesi için ihtiyaç duyduğu bilgileri açıklar. Visual Studio başladığında, kullanılabilir .addin dosyaları için .addin dosya konumuna bakar. Herhangi birini bulursa, XML dosyasını okur ve Eklenti Yöneticisi'ne eklenti tıklatıldığında başlaması için gerekli bilgileri verir.

.addin dosyası, Eklenti Sihirbazı'nı kullanarak bir eklenti yarattığınızda otomatik olarak oluşturulur.

Daha fazla bilgi için bkz. Eklenti kayıt.

Ff458704.collapse_all(tr-tr,VS.110).gifEklenti Dosyası Konumları

.addin dosyasının iki kopyası Eklenti Sihirbazı tarafından, otomatik olarak aşağıdaki gibi oluşturulur:

.Addin Dosya Konumu

.Dll Dosya Konumu

Tanımlama

Kök proje klasörü

\Documents\Visual Studio 11\Projects\MyAddin1\MyAddin1\

Yerel yol (MyAddin1.dll)

Eklenti projesinin dağıtımı için kullanılır. Projeye düzenleme kolaylığı sağlamak için dahil edilmiştir ve XCopy tarzı dağıtımının yerel yolu vardır.

Eklenti klasörü

\Documents\Visual Studio 11\Addins\

-veya-

Paylaşılan Belgeler Konumu\Addins\

Proje hata ayıklama klasörü

(Örneğin, \ Documents\Visual Studio 11

Projects\MyAddin1\MyAddin1\bin\)

Eklentinin hata ayıklama ortamında çalıştırılması için kullanılır. Her zaman geçerli yapı yapılandırmasının çıktı yolunu göstermelidir.

Bir Windows Form Control Library Projesi Oluşturun

Önceki yordamda oluşturulan Visual Studio eklentisi UserControl sınıfının bir örneğini oluşturmak için Windows Forms Denetim Kitaplığı projesine başvurur.

Daha fazla bilgi için bkz. Windows Forms Denetimleri.

Web Test Sonuçları Görüntüleyicisi'nde kullanılmak üzere bir denetim oluşturmak için

  1. Çözüm Gezgini'nde, çözüm üzerinde sağ tıklayın, seçim Ekle seçip Yeni bir proje.

    Yeni Proje iletişim kutusu görüntülenir.

  2. Yüklü Şablonlar altında Visual Basic'i ya da Visual C# öğesini genişletin ve Windows'u seçin.

    Not

    Bu konu örnek kod için Visual C# kullanmaktadır.

  3. Şablon listesinde Windows Forms Denetim Kitaplığını seçin.

  4. Ad altına eklenti için bir ad yazın. Örneğin, WebPerfTestResultsViewerControl.

  5. Tamam'ı seçin.

    WebPerfTestResultsViewerControl denetim kitaplığı projesi oluşturan Windows, tasarım modunda görüntülenen Çözüm Gezgini ve UserControl1.cs öğelerine eklenir.

  6. Araç kutusundan, userControl1 yüzeyine bir DataGridView sürükleyin.

  7. DataGridView sol üst kısmındaki eylem etiket karakterini (Akıllı etiket karakteri) tıklatın ve şu adımları izleyin:

    1. Seçim Ana kapsayıcıda yerleştir.

    2. Eklemeyi Etkinleştir, Düzenlemeyi Etkinleştir, Silmeyi Etkinleştir ve Sütun Yeniden Sıralamayı Etkinleştir onay kutularını temizleyin.

    3. Seçim sütun eklemek.

      Sütun Ekle iletişim kutusu görüntülenir.

    4. Tür açılır listesinde DataGridViewTextBoxColumn' öğesini seçin.

    5. Üstbilgi metni üzerindeki "Column1" metnini temizleyin.

    6. Ekle öğesini seçin.

    7. Seçim Kapat.

  8. Özellikler penceresinde resultControlDataGridView için DataGridView'nın Adı özelliğini değiştirin.

  9. Tasarım yüzeyini sağ tıklayın ve Kodu Görüntüle'yi seçin.

    UserControl1.cs dosyası Kod Düzenleyicisinde görüntülenir.

  10. Örneklenen UserControl sınıfının adını UserContro1'dan resultControl olarak değiştirin.

    namespace WebPerfTestResultsViewerControl
    {
        public partial class resultControl : UserControl
        {
            public resultControl()
            {
                InitializeComponent();
            }
    

    Sonraki yordamda, resultControl sınıfına başvuracak WebPerfTestResultsViewerAddin projesinin Connect.cs dosyasına kod ekleyeceksiniz.

    Daha sonra Connect.cs dosyasına bazı ek kodlar ekleyeceksiniz.

WebPerfTestResultsViewerAddin'e Kod Ekleyin

Web Test Sonuçları Görüntüleyicisi'ni genişletmek için Visual Studio Eklentisi'ne kod eklemek için

  1. Çözüm Gezgini'ndeki WebPerfTestResultsViewerAddin projesindeBaşvurular düğümünü sağ tıklatın ve Başvuru Ekle'yi seçin.

  2. İçinde Add Reference iletişim kutusunda, seçim .net sekme.

  3. Aşağı kaydırın ve Microsoft.VisualStudio.QualityTools.WebTestFramework ve System.Windows.Forms bilgilerini seçin.

  4. Tamam'ı seçin.

  5. Başvurular düğümünü tekrar sağ tıklayın ve Referans Ekle'yi seçin.

  6. İçinde Add Reference iletişim kutusunda, seçim göz sekme.

  7. Seçmek için aþaðý açýlan Bak için %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies gidin ve Microsoft.VisualStudio.QualityTools.LoadTestPackage.dll dosyasını seçin.

  8. Tamam'ı seçin.

  9. WebPerfTestResultsViewerAddin proje düğümünü sağ tıklayın ve Başvuru Ekle'yi seçin.

  10. İçinde Add Reference iletişim kutusunda, seçim projeleri sekme.

  11. Altında Proje adı, select WebPerfTestResultsViewerControl 'ı seçin ve proje Tamam.

  12. Connect.cs dosyası Solution Explorer'da hala açık değilse, WebPerfTestResultsViewerAddin projesindeki Connect.cs dosyasını sağ tıklatın ve View Code'u seçin.

  13. Connect.cs dosyasına aşağıdaki Kullanım deyimini ekleyin:

    using System.IO;
    using System.Windows.Forms;
    using System.Collections.Generic;
    using Microsoft.VisualStudio.TestTools.LoadTesting;
    using Microsoft.VisualStudio.TestTools.WebTesting;
    using WebPerfTestResultsViewerControl;
    
  14. Connect.cs dosyasının alt kısmına kaydırın. Web Performans Test sonuçları Görüntüleyicisi'nin birden fazla örneği açık durumdaysa UserControl için bir GUID'ler listesi eklemeniz gerekir. Bu listeyi kullanan kodu ekleyeceksiniz.

    Daha sonra kodlayacağınız OnDiscconection yönteminde ikinci bir Dize Listesi kullanılır.

            private DTE2 _applicationObject;
            private AddIn _addInInstance;
    
            private Dictionary<Guid, List<UserControl>> m_controls = new Dictionary<Guid, List<UserControl>>();
            private List<string> temporaryFilePaths = new List<string>();
    
  15. Connect.cs dosyası IDTExtensibility2 sınıfından Bağlan adında bir sınıf oluşturur ve ayrıca Visual Studio eklentisinin uygulanması için bazı yöntemler içerir. Yöntemlerden biri eklentinin yüklenmekte olduğuna dair bildirim alan OnConnection yöntemidir. OnConnection yönteminde Web Performans Testi Sonuçları Görüntüleyicisi için genişletilebilirlik paketinizi oluşturmak için LoadTestPackageExt sınıfını kullanırsınız. Aşağıdaki kodu OnConnection yöntemine ekleyin:

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
                {
                _applicationObject = (DTE2)application;
                _addInInstance = (AddIn)addInInst;
    
                // Create a load test packge extensibility class.
                LoadTestPackageExt loadTestPackageExt = _applicationObject.GetObject("Microsoft.VisualStudio.TestTools.LoadTesting.LoadTestPackageExt") as LoadTestPackageExt;
    
                // Process open windows.
                foreach (WebTestResultViewer webTestResultViewer in loadTestPackageExt.WebTestResultViewerExt.ResultWindows)
                {
                    WindowCreated(webTestResultViewer);
                }
    
                // Create event handlers.
                loadTestPackageExt.WebTestResultViewerExt.WindowCreated += new EventHandler<WebTestResultViewerExt.WindowCreatedEventArgs>(WebTestResultViewerExt_WindowCreated);
                loadTestPackageExt.WebTestResultViewerExt.WindowClosed += new EventHandler<WebTestResultViewerExt.WindowClosedEventArgs>(WebTesResultViewer_WindowClosed);
                loadTestPackageExt.WebTestResultViewerExt.SelectionChanged += new EventHandler<WebTestResultViewerExt.SelectionChangedEventArgs>(WebTestResultViewer_SelectedChanged);
            }
    
  16. OnConnection yöntemine eklediğiniz loadTestPackageExt.WebTestResultViewerExt.WindowCreated olay işleyicisi ile WebTestResultViewerExt_WindowCreated yönteminin çağırdığı WindowCreated yöntemine yönelik WebTestResultViewerExt_WindowCreated yöntemi oluşturmak için bağlan sınıfına aşağıdaki kodu ekleyin.

            void WebTestResultViewerExt_WindowCreated(object sender, WebTestResultViewerExt.WindowCreatedEventArgs e)
            {
                // New control added to new result viewer window.
                WindowCreated(e.WebTestResultViewer);
            }
    
    private void WindowCreated(WebTestResultViewer viewer)
            {
                // Instantiate an instance of the resultControl referenced in the WebPerfTestResultsViewerControl project.
                resultControl resultControl = new resultControl();
    
                // Add to the dictionary of open playback windows.
                System.Diagnostics.Debug.Assert(!m_controls.ContainsKey(viewer.TestResultId));
                List<UserControl> userControls = new List<UserControl>();
                userControls.Add(resultControl);
    
                // Add Guid to the m_control List to manage Result viewers and controls.
                m_controls.Add(viewer.TestResultId, userControls);
    
                // Add tabs to the playback control.
                resultControl.Dock = DockStyle.Fill;
                viewer.AddResultPage(new Guid(), "Sample", resultControl);
            }
    
  17. OnConnection yöntemine eklediğiniz loadTestPackageExt.WebTestResultViewerExt.SelectionChanged olay işleyicisine yönelik WebTestResultViewer_SelectedChanged yöntemi oluşturmak için bağlan sınıfına aşağıdaki kodu ekleyin:

            void WebTestResultViewer_SelectedChanged(object sender, WebTestResultViewerExt.SelectionChangedEventArgs e)
            {
                foreach (UserControl userControl in m_controls[e.TestResultId])
                {
                    // Update the userControl in each result viewer.
                    resultControl resultControl = userControl as resultControl;
                    if (resultControl != null)
                        // Call the resultControl's Update method (This will be added in the next procedure).
                        resultControl.Update(e.WebTestRequestResult);
                }
            }
    
  18. OnConnection yöntemine eklediğiniz loadTestPackageExt.WebTestResultViewerExt.WindowClosed olay işleyicisine yönelik WebTesResultViewer_WindowClosed yöntemi oluşturmak için bağlan sınıfına aşağıdaki kodu ekleyin:

            void WebTesResultViewer_WindowClosed(object sender, WebTestResultViewerExt.WindowClosedEventArgs e)
            {
                if (m_controls.ContainsKey(e.WebTestResultViewer.TestResultId))
                {
                    m_controls.Remove(e.WebTestResultViewer.TestResultId);
                }
            }
    

    Visual Studio eklentisi için kod tamamlandıktan sonra, WebPerfTestResultsViewerControl projesindeki resultControl öğesine Güncelleştirme yöntemi eklemeniz gerekir.

WebPerfTestResultsViewerControl'a Kod Ekleyin

Daha fazla bilgi için bkz. Windows Forms denetimi geliştirme temelleri.

Kullanıcı denetimine kod eklemek için

  1. Çözüm Gezgini'nde WebPerfTestResultsViewerControl proje düğümünü sağ tıklatın ve Özellikleri'i seçin.

  2. Seçin Uygulama sekmesini ve sonra seçin hedef Framework'ü seçin ve açılan liste .net Framework 4 ve özellikleri'ni kapatın.

    Bu, Web Performans Test Sonuçları Görüntüleyicisi'ni genişletmek için gerekli dll başvurularını desteklemek için gereklidir.

  3. Çözüm Gezgini'ndeki WebPerfTestResultsViewerControl projesindeBaşvurular düğümünü sağ tıklatın ve Başvuru Ekle'yi seçin.

  4. Başvuru Ekle iletişim kutusunda .NET sekmesini tıklatın.

  5. Aşağı kaydırın ve Microsoft.VisualStudio.QualityTools.WebTestFramework bilgisini seçin.

  6. Tamam'ı seçin.

  7. UserControl1.cs dosyasına aşağıdaki Kullanım deyimlerini ekleyin:

    using Microsoft.VisualStudio.TestTools.WebTesting;
    using Microsoft.VisualStudio.TestTools.WebTesting.Rules;
    
  8. Çağrılan ve WebTestRequestResult WebPerfTestResultsViewerAddin WebTestResultViewer_SelectedChanged yöntemini geçiren Güncelleştirme yöntemini Connect.cs dosyasına ekleyin. Güncelleştirme yöntemi, DataGridView öğesini WebTestRequestResult öğesi içinden geçirilen çeşitli özelliklerle doldurur.

    public void Update(WebTestRequestResult WebTestResults)
            {
                // Clear the DataGridView when a request is selected.
                resultControlDataGridView.Rows.Clear();
                // Populate the DataGridControl with properties from the WebTestResults.
                this.resultControlDataGridView.Rows.Add("Request: " + WebTestResults.Request.Url.ToString());
                this.resultControlDataGridView.Rows.Add("Response: " + WebTestResults.Response.ResponseUri.ToString());
                foreach (RuleResult ruleResult in WebTestResults.ExtractionRuleResults)
                {
                    this.resultControlDataGridView.Rows.Add("Extraction rule results: " + ruleResult.Message.ToString());
                }
                foreach (RuleResult ruleResult in WebTestResults.ValidationRuleResults)
                {
                    this.resultControlDataGridView.Rows.Add("Validation rule results: " + ruleResult.Message.ToString());
                }
                foreach (WebTestError webTestError in WebTestResults.Errors)
                {
                    this.resultControlDataGridView.Rows.Add("Error: " + webTestError.ErrorType.ToString() + " " + webTestError.ErrorSubtype.ToString() + " " + webTestError.ExceptionText.ToString());
                }
            }
    

WebPerfTestResultsViewerAddin Çözümünü Oluşturun

Çözümü oluşturmak için

  • Yapı menüsünde Yapı Çözümü öğesini seçin.

WebPerfTestResultsViewerAddin Eklentisini Kaydet

Eklenti Yöneticisi'ni kullanarak eklentiyi kaydetmek için

  1. Üzerinde araçları menüsünde, select Add-in Manager.

  2. Eklenti Yöneticisi iletişim kutusu görüntülenir.

  3. Kullanılabilir Eklentiler sütunundaki WebPerfTestResultsViewerAddin eklentisi onay kutusunu seçin ve Başlangıç ve Komut Satırı sütunları altındaki onay kutularını temizleyin.

  4. Tamam'ı seçin.

    Daha fazla bilgi için bkz. Nasıl yapılır: denetim Eklenti Yöneticisi'ni kullanarak eklentileri.

WebPerfTestResultsViewerAddin Eklentisi Yapısını Kullanarak Web Başarı Testini Çalıştırma

Web Başarım Test Sonuçları Görüntüleyicisi için yeni VS Eklentisini çalıştırmak için

  1. Web başarım testinizi çalıştırın ve Web Performans Test sonuçları Görüntüleyicisinde görüntülenen Örnek başlıklı WebPerfTestResultsViewerAddin eklentisi yeni sekmesini göreceksiniz.

  2. DataGridView üzerinde sunulan özellikleri görmek için sekmesini seçin.

Güvenlik

Kötü niyetli eklentileri otomatik olarak etkinleşmesini engelleyerek güvenliği geliştirmek için Visual Studio öğesi Eklenti/Makro Güvenliği adındaki bir Araçlar Seçenekler sayfasında ayarları sunar.

Ayrıca bu seçenekler Visual Studio öğesinin içlerinde.AddIn kayıt dosyalarını aradığı klasörleri belirtmenize olanak verir. Bu, .AddIn kayıt dosyalarının okunabileceği konumları sınırlandırmanıza olanak tanıyarak güvenliği iyileştirir. Bu kötü amaçlı engellemeye yardımcı olur.AddIn dosyalarının istem dışı.

Eklenti Güvenlik Ayarları

Add-in/Macros Security, Environment, Options Dialog Box öğesindeki güvenlik eklentiyle ilgili ayarlar aşağıdaki gibidir:

  • Yüklenecek eklenti bileşenlerine izin ver. Varsayılan olarak seçilidir. Seçildiklerinde eklentiler Visual Studio öğesinde yüklenebilirler. Seçilmediklerinde eklentilerin Visual Studio öğesinde yüklenmeleri yasaktır.

  • Bir URL'den yüklenecek eklenti bileşenlerine izin ver. Varsayılan olarak seçili değildir. Seçildiklerinde eklentiler dış Web sitelerinden yüklenebilirler. Seçilmediklerinde uzak eklentilerin Visual Studio öğesinde yüklenmeleri yasaktır. Herhangi bir nedenle bir eklenti yüklenemiyorsa, Web'den de yüklenemez. Bu ayar yalnızca eklenti DLL'in yüklenmesini denetler. .Addin kayıt dosyaları her zaman yerel sistemde bulunmalıdır.

  • Daha fazla bilgi için bkz. Güvenlik eklentisi.

Ayrıca bkz.

Görevler

Nasıl yapılır: denetim Eklenti Yöneticisi'ni kullanarak eklentileri

İzlenecek yol: bir eklenti projesi hata ayıklama

Başvuru

UserControl

Microsoft.VisualStudio.TestTools.LoadTesting

Microsoft.VisualStudio.TestTools.WebTesting

Microsoft.VisualStudio.TestTools.WebTesting.Rules

UserControl

DataGrid

Kavramlar

Eklenti kayıt

Otomasyon nesne modeli şeması

Windows Forms denetimleri olayları

Diğer Kaynaklar

Yükleme ve Web Performansı Testleri için Özel Eklentiler Oluşturma ve Kullanma

Windows Forms denetimleri özellikleri

Özel Windows Forms denetimleri ile geliştirmek.net Framework