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

标签 c# winforms event-handling

这是好的做法吗? 我有 3 个 DataGridView,我想要一个允许用户通过单击列标题对数据进行排序的工具。我本可以为每个 DataGridView 的 ColumnHeaderMouseClick 事件设置一个事件处理程序,但我做了一个:

private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        SortDataGridView((sender as DataGridView), e.ColumnIndex);
    }

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;
        }
    }

DataGridView 的每个 ColumnHeaderMouseClick 事件都连接到此处理程序。这意味着为了在运行时意识到哪个引发了事件,我必须说(发送者作为 DataGridView)。这样安全吗? sender 可以是不是 DataGridView 的东西吗?

最佳答案

不仅可以,而且更好,因为它使您的代码更可重用、可维护和可扩展。

关于c# - 对不同的 Windows 窗体控件使用相同的事件处理程序是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1194058/

相关文章:

c# - WPF 类型或命名空间名称 'Browser' 在命名空间 'System.Windows' 中不存在(是否缺少程序集引用?)

c# - Where 子句中包含 ".Any"的动态 Linq (C#/.Net Core/EF Core)

c# - MVP、WinForms、单元测试、起订量、NUnit : Verify that event handlers have been added to a dependency

javascript - 有没有更好的方法来处理相同的回调函数但不同的输入参数?

javascript - 如何在 JavaScript 中为各种事件创建单个事件处理程序

c# - 确定数据库是否是 Azure 数据库

c# - IDisposable接口(interface)的主要用途

c# - 使用打开文件对话框将位图图像加载到 Windows 窗体中

.net - 如何在 .NET 中使用 TreeView 控件创建三态复选框?

event-handling - 用于移动刻度( slider )的 gtk 信号?