2009-06-24 12 views
5

Bir datagridview'e bazı işlevler eklemek için yazdığım bazı kodları yeniden kullanmak istiyorum. Varsayılan datagridview özelliklerinin ve olayların açığa çıkmasını istiyorum, bu yüzden yeni bir özel bileşen oluşturmak istemedim. bu yüzden iyi çalışan bir alt sınıf yazmaya çalıştım. ama aynı zamanda, yapıcıda bir datagridview alan ve aynı şekilde ayarlayan bağımsız bir yardımcı program sınıfı yazabileceğim de oldu. Örneğin.yardımcı program sınıfı veya alt sınıflandırma .net denetimleri

public class 
MyGrid 
{ 
    private DataGridView m_dg; 

    public MyGrid(DataGridView dg) 
    { 
     m_dg = dg; 
     m_dg.RowHeadersVisible = false; 
     m_dg.SortCompare += new DataGridViewSortCompareEventHandler(m_dg_SortCompare); 
    } 

    void m_dg_SortCompare(object sender, DataGridViewSortCompareEventArgs e) 
    { 
     // do custom sorting here 
    } 
} 

yani bir yerde benim uygulamanın başlangıçta ben benzeri

MyGrid g1 = new MyGrid(dataGridView1); 
MyGrid g2 = new MyGrid(dataGridView2); 

ve çağırır. Bu yaklaşımın herhangi bir dezavantajı? kodun çoğu aynı olacak gibi görünüyor, fark, genişletilmiş ızgarayı nasıl başlattığınız arasındadır (sürükle ve bırak yöntemine bir alt sınıf denetimini sürükleyip düz bir datagridview sürükleyip yukarıdaki kodu çağırın)

cevap

1

Bir yardımcı program sınıfının tek dezavantajı, tasarımcı desteğini kaybetmenizdir. Anlamı, eğer kontrolü alt sınıflara ayırırsanız, tasarımcıya eklediğinizde, devralınan denetiminizin yapıcısında yaptığınız değişiklikler tasarımcıda görünecektir. Ayrıca, bazı özellikler eklemek istiyorsanız, özellikler penceresinde daha fazla esneklik kazandıracaklardır. Eğer tasarımcı desteği sizin için önemli değilse, o zaman yardımcı program sınıfında başka sakınca görmüyorum.

3

DataGridView ürününü sıralamayı değiştirmekten daha önemli bir şey yapmıyorsanız, uzun vadede bir yardımcı sınıf, bir alt sınıf denetimden daha sürdürülebilir olacaktır.

Yardımcı sınıf için yaklaşımınız (kurucuda bir DataGridView alarak) sağlam bir yaklaşımdır.

1

C# 3 kullanıyorsanız, extension methods bir göz atmaya değer olabilir. Bir türe davranış ekliyorsunuz, kutunun dışında olmasını istediğiniz gibi görünüyor.

static class GridExtMethods 
    { 
     public static void SortAsICommand(this MyGrid grid) 
     { 
      //grid.Prop = value; possible 
      grid.Sort += MyCustomSort; 
     } 
     static void MyCustomSort(object sender, SortEventArgs evtArgs) 
     { 
      Console.WriteLine("Sort {0} and {1}", evtArgs.First, evtArgs.Second); 
     } 
    } 

....

static void Main() 
{ 
    var grid = new MyGrid(10,20); 
    grid.SortAsICommand(); 

    //grid.RaiseEvent(); do something that raises the event 
} 
İlgili konular