如何为不同的事件执行相同的代码

时间:2016-07-27 12:40:12

标签: c# events casting

我必须使用触摸显示器,有时使用鼠标和普通显示器。

因此,对于拖放,第一个将是

  

private void lvAllowedPPtab2_StylusButtonDown(object sender,StylusButtonEventArgs e)

和第二次

  

private void ListBox_PreviewMouseLeftButtonDown(object sender,MouseButtonEventArgs e)

之后我必须使用sender和e。

执行相同的代码

我没有做一个通用的代码例程。 这两个事件是相似的,都有GetPosition事件。

我可能采取了错误的道路,但我已经做了类似的事情:

Type eventType;
if (_e is StylusButtonEventArgs)
    eventType = typeof (StylusButtonEventArgs);
else
    eventType = typeof(MouseEventArgs);

但后来我不知道如何将e转换为事件类型。

谢谢

1 个答案:

答案 0 :(得分:1)

你可以用它们打电话给他们

    private void listView_StylusButtonDown(object sender, StylusButtonEventArgs e) { CommonCode(sender, e); }

    private void listView_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e) { CommonCode(sender, e); }

然后告诉公共代码

    private void CommonCode(object sender, object _e)
    {

        //Sender is common
        ListView parent = (ListView)sender;
        string strListViewButtonName = (sender as ListView).Name;

        if (_e is StylusButtonEventArgs)
             ... (_e as StylusButtonEventArgs).GetPosition(parent));
        else
             ... (_e as MouseEventArgs).GetPosition(parent));

    }

更好的实施(感谢Eli Arbel):

    private void listView_StylusButtonDown(object sender, StylusButtonEventArgs e) { CommonCode(sender, e.GetPosition((ListView)sender)); }

    private void listView_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e) { CommonCode(sender, e.GetPosition((ListView)sender)); }


    private void CommonCode(object sender, Point p)
    {
        //Sender is common
        ListView parent = (ListView)sender;
        string strListViewButtonName = (sender as ListView).Name;

        //you don't need getPosition since P is known

    }