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的东西吗?