为不同的Windows窗体控件使用相同的事件处理程序是否安全?

Cor*_*ker 2 c# event-handling winforms

这是好习惯吗?我有3个DataGridView,我希望有一个工具允许用户通过单击列标题对数据进行排序.我可以为每个DataGridView的ColumnHeaderMouseClick事件创建一个事件处理程序,但我做了一个:

private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        SortDataGridView((sender as DataGridView), e.ColumnIndex);
    }
Run Code Online (Sandbox Code Playgroud)

SortDataGridView看起来像这样:

/// <summary>
    /// Sorts a given DataGridView by a column given by its columnIndex.
    /// Default sort (if it isn't currently sorted) is Ascending. If it's 
    /// already sorted Ascending, change it to Descending. If it is Descending,
    /// change it to Ascending.
    /// </summary>
    /// <param name="dataGridViewToSort">The DataGridViewToSort</param>
    /// <param name="columnIndexToSortBy">The index of the column which we want to sort by in the DataGridView.</param>
    private void SortDataGridView(DataGridView dataGridViewToSort, int columnIndexToSortBy)
    {
        switch (dataGridViewToSort.SortOrder)
        {
            case SortOrder.Ascending:
                dataGridViewToSort.Sort(dataGridViewToSort.Columns[columnIndexToSortBy], ListSortDirection.Descending);
                break;
            case SortOrder.Descending:
                dataGridViewToSort.Sort(dataGridViewToSort.Columns[columnIndexToSortBy], ListSortDirection.Ascending);
                break;
            case SortOrder.None:
                dataGridViewToSort.Sort(dataGridViewToSort.Columns[columnIndexToSortBy], ListSortDirection.Ascending);
                break;
            default:
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

每个DataGridView的ColumnHeaderMouseClick事件都连接到此处理程序.这意味着为了实现哪一个在运行时引发事件,我不得不说(sender作为DataGridView).这样安全吗?发件人可能是不是DataGridView的东西吗?

Cha*_*ana 5

它不仅好,而且更好,因为它使您的代码更易于重用,可维护和可扩展.