Laden...

Wie kann ich jeden Click auf die Buttons in meiner Form loggen?

Erstellt von Ken Guru 4711 vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.372 Views
K
Ken Guru 4711 Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren
Wie kann ich jeden Click auf die Buttons in meiner Form loggen?

Moin!

ich möchte jeden Click auf diverse Buttons in meiner Form loggen.

Dabei sollen alle Buttons, welche einen Click-EventHandler haben beim Click geloggt werden.

Ich könnte nun in jeden Event entsprechenden Code schreiben, finde es aber schöner und flexibler, wenn das Programm sich in die jeweiligen Click-EventHandler einhängen würde, das Logging ausführen würde und dann den eigentlichen Methodeninhalt ausführt.

Leider habe ich überhaupt keine Ahnung, wie ich das bewerkstelligen könnte. Deshalb frage ich hier mal die Spezialisten.

Hat jemand eine Idee hierzu?

Grüße

Ken

16.807 Beiträge seit 2008
vor 3 Jahren

Geht es Dir nur um das Loggen oder was hast Du vor?
Was ist der Sinn?

Evtl. gibt es einen besseren Weg zu Deinem Ziel zu kommen als über ein UI Event Tracing, das doch in der gewünschten Form relativ aufwendig wird / werden kann.

K
Ken Guru 4711 Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Hallo Abt,

ja, es geht nur um das Loggen von ButtonClicks nach dem Schema

WriteActivityLogs(GetType().Name, MethodBase.GetCurrentMethod().Name);

Der Sinn ist ein AktivitätenLog, da einige User es nicht für nötig halten, das Programm zu nutzen, sondern auf die alte bekannte Weise verfahren, obwohl die Nutzung des Programms einen enormen Zeitvorteil bietet (hört sich komisch an, ist aber so). Diese Kandidaten wollen wir ermitteln und ggf. auf den Pott setzen mit den Erkenntnissen aus dem Log.

Ich habe das in meinem Post extra einfach gehalten. Tatsächlich geht es um ein größeres Projekt mit vielen UserControls und Buttons. Hier wäre eine programmatische Lösung, wie beschrieben, die einfachste Lösung, anstatt Code nachträglich in jeden Click-Handler zu schreiben zu müssen.

Grüße

Ken

4.931 Beiträge seit 2008
vor 3 Jahren

Schau mal, ob dir eine der Lösungen in Logging all button clicks in WinForms app weiterhelfen?

  1. AttachButtonLogging: rekursiv alle Buttons ermitteln und eigenes Log-Event dranhängen
    Du müßtest dies aber dann jeweils im Konstruktor jeder einzelnen Form machen (nach InitializeComponent()). Oder evtl. eine Basisklasse für alle Forms bereitstellen, welche dann im FormLoad-Ereignis diese Methode aufruft.

  2. LoggerButton: eigene Button-Klasse benutzen und diese per C&P im gesamten Projekt einsetzen

Evtl. gibt es auch noch Möglichkeiten per "Aspektorientierter Programmierung (AOP)", z.B. mittels PostSharp, s. z.B. PostSharp: Intercepting Events.

5.657 Beiträge seit 2006
vor 3 Jahren

Hört sich vielleicht auch komisch an, aber man könnte die Mitarbeiter ja auch mal befragen, was an dem Programm gut ist und was nicht so gut ist, bevor man eine firmenweite Überwachung ausrollt.

Weeks of programming can save you hours of planning

16.807 Beiträge seit 2008
vor 3 Jahren

..davon abgesehen ist diese Art der Überwachung ohne Einwilligung sehr wahrscheinlich verboten, da es um ein Nutzungsverhalten (und Du sprichst sogar von Konsequenzen) und nicht um die Telemetrie geht.
Das unterliegt der DSGVO und muss gegenüber Nutzern kommuniziert werden.

Betriebsräte dürften da direkt Schnappatmung bekommen - zurecht.
Kann da nur hoffen, dass sich die betroffenen Mitarbeiter wehren.

T
2.219 Beiträge seit 2008
vor 3 Jahren

Neben dem was Abt zum Thema DSGVO schreibt, klingt das ganze dann nach einem schlecht durchdachten Rollout der eigentlichen Software.
Wenn ihr solche Maßnahmen fahren müsst um eure Mitarbeiter zu überwachen, dann scheint ihr den Leuten scheinbar nicht erklärt zu haben welchen Nutzen die eigentliche Lösung hat.

Und anstelle einer ordentlichen Schulung wollt ihr lieber eure Mitarbeiter überwachen und dann ins Messer laufen lassen?
Halte ich für ein sehr Mitarbeiterfeindliches Vorgehen.

Warum habt ihr dann noch einfach einen harten Bruch ab einem bestimmten Tag X geplant, an dem der alte Weg nicht mehr nutzbar ist und dies auch kommuniziert?
Wenn der alte Weg über Software läuft, die unter eurer Kontrolle ist, dann könnt ihr diesen auch entfernen oder verbauen.

Wenn diese andersweitig läuft, gibt es auch hier Mittel und Wege ohne Mitarbeiterüberwachung einen klaren Bruch mit dem alten Weg zu vollziehen.
Wird zwar auch den ein oder anderen Mitarbeiter nicht gefallen, aber das fällt i.d.R. immer als Startschwierigkeit unter den Tisch.

Meistens müssen die Leute einfach nur mal aus eigener Erfahrung lernen, dass der alte Weg langsamer und ineffizienter ist als der neue.
Das kann man am einfachsten auch mit einer allgemeinen Schulung der neuen Software lösen ohne das man hier einen Mitarbeiter direkt ins offene Messer laufen lässt.

Bei uns haben wir auch eine 10 Jahre alte Software Lösung über das ganze letzte Jahr verteilt einem riesen Facelifting unterzogen.
Hier gab es am Anfang auch einige Kunden, die mit den neuen Laufwegen in der Software am Anfang nicht zufrieden waren.
Mit der Zeit für die Umgewöhnung, einigen Schulungsvideos sowie direkten Kunden Schulungen und auch direkten Support konnten wir aber alle Kunden und auch Mitarbeiter von dem "neuen" Produkt überzeugen.

Nur so kann man auch Leute dazu bewegen, mit dem richtigen Weg zu verwenden.
Ohne Kooperation mit den Zielgruppen wird man hier immer auf einem Holzweg hinauslaufen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

K
Ken Guru 4711 Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Schau mal, ob dir eine der Lösungen in
>
weiterhelfen?

  1. AttachButtonLogging: rekursiv alle Buttons ermitteln und eigenes Log-Event dranhängen
    Du müßtest dies aber dann jeweils im Konstruktor jeder einzelnen Form machen (nach InitializeComponent()). Oder evtl. eine Basisklasse für alle Forms bereitstellen, welche dann im FormLoad-Ereignis diese Methode aufruft.

  2. LoggerButton: eigene Button-Klasse benutzen und diese per C&P im gesamten Projekt einsetzen

Evtl. gibt es auch noch Möglichkeiten per "Aspektorientierter Programmierung (AOP)", z.B. mittels PostSharp, s. z.B.
>
.

Hallo Th69,

wollte mich noch kurz hierzu melden. Dein erster Link hat mir weitergeholfen. Mit kleinen Änderungen läuft soweit alles wie es soll.

Danke!

Grüße

Ken