对于不同的控件使用与事件相同的功能是不是一个坏主意?

时间:2014-01-04 15:37:43

标签: c# winforms

一个例子:

private void ListViewGeneric_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}

并将此函数指定为ListView1,ListView2,ListView3的事件函数:

this.ListView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.ListViewGeneric_DragEnter)
this.ListView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.ListViewGeneric_DragEnter)
this.ListView3.DragEnter += new System.Windows.Forms.DragEventHandler(this.ListViewGeneric_DragEnter)

另一个例子:

private void ListViewGeneric_DragDrop(object sender, DragEventArgs e)
{
    ListView listView = sender as ListView;

    System.Drawing.Point cp = listView.PointToClient(new System.Drawing.Point(e.X, e.Y));
    ListViewItem dragToItem = listView.GetItemAt(cp.X, cp.Y);
    if (dragToItem != null)
    {
        int dropIndex = dragToItem.Index;
        MoveListItem(listView, listView.FocusedItem.Index, dropIndex);
    }
}

DragDropEventHandler做同样的事情吗?

在这种情况下,我可以使用sender来知道哪个控件称为函数。这是个坏主意吗?有什么东西会变坏,或者变得不可预测吗,ambiguos?

1 个答案:

答案 0 :(得分:11)

这很好。

你不想做的是从

开始
if (sender == control1) { ... }
else if (sender == control2) { ... }
...

以适当的方式命名处理程序以指示处理多个控件的事件也很重要(你已经做得很好)。