实用程序类与子类.net控件

toa*_*ven 5 c# controls datagridview subclassing

我想重用我编写的一些代码来为datagridview添加一些功能.我希望公开默认的datagridview属性和事件,因此我不想创建新的自定义组件.所以我尝试编写一个子类,工作正常.但我也想到我可以编写一个独立的实用程序类,它在构造函数中获取datagridview并以相同的方式设置它.例如

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
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在我的应用程序启动的某个地方,我会打电话

MyGrid g1 = new MyGrid(dataGridView1);
MyGrid g2 = new MyGrid(dataGridView2);
Run Code Online (Sandbox Code Playgroud)

等等.这种方法的任何缺点?看起来大部分代码都是一样的,不同之处在于如何实例化扩展网格(将子类控件拖放到表单中,拖动普通数据网格并调用上面的代码)

BFr*_*ree 1

实用程序类的唯一缺点是失去设计者的支持。这意味着,如果您对控件进行子类化,则当您将其添加到设计器时,您在继承的控件的构造函数中所做的任何更改都将显示在设计器中。此外,如果您想向其添加一些属性,它们将显示在属性窗口中,从而赋予其更大的灵活性。如果设计器支持对您来说并不重要,那么我认为实用程序类没有任何其他缺点。