2016-07-27 8 views
0

Ich muss mit Touch-Monitoren und manchmal mit Maus und normalen Monitoren arbeiten.So führen Sie den gleichen Code für verschiedene Ereignisse aus

Also für Drag & Drop die zum ersten

wäre

private void lvAllowedPPtab2_StylusButtonDown (object sender, StylusButtonEventArgs e)

und für die zweite

private void ListBox_PreviewMouseLeftButtonDown (Objektabsender, MouseButtonEventArgs e)

danach muss ich den gleichen Code mit Absender und e ausführen.

Ich habe nicht eine gemeinsame Code-Routine zu machen. Die beiden Ereignisse sind ähnlich und beide haben das GetPosition-Ereignis.

Ich könnte den falschen Weg genommen haben, aber ich habe etwas tought wie:

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

aber dann weiß ich nicht, wie e-Ereignistyp zu werfen.

Danke

+1

müssen Sie tun: '' if (_e ist StylusButtonEventArgs) var eventargs = _e als StylusButtonEventArgs; '' –

+0

Sie benötigen den Typ nicht. Wirf es einfach und hol dir deine Position. – juharr

+0

var kann nicht in if-Anweisung eingebettet werden – Luca

Antwort

1

Sie beide mit dem

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

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

und dann sagen, innerhalb gemeinsamen Code

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

    } 

Eine bessere Umsetzung (dank Eli Arbel) anrufen:

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 

    } 
+2

Es gibt wirklich keinen Grund, die Eventargumente nach unten zu werfen. Übergeben Sie einfach die Position vom Handler an die allgemeine Methode. –

+0

Sie haben Recht. Das könnte besser sein – Patrick