[Windows App]Event-Status mit PopUp und Vorleser

[Windows App]Event-Status mit PopUp und Vorleser

in Fan-Inhalte

Posted by: Ich Mkay.4370

Ich Mkay.4370

Hallo liebe Community,

nachdem ich nun schon einige Zeit mit einem Kumpel zusammen an einer eigenen App geschraubt habe, möchte ich euch diese Heute vorstellen:

Features:
-nach Status-, Namens- oder Map-Filter nach Events suchen
-Überwachen der Eventstati für die ausgewählten Events auf dem von euch gewählten Server
-Eventstati werden im Eventbrowser farblich dargestellt
-Möglichkeit, einen Erinnerungston abzuspielen, wenn ein Event aktiv schaltet
-Möglichkeit, Eventnamen vorlesen zu lassen, wenn ein Event aktiv schaltet
-Möglichkeit, ein Popup mit Eventnamen im Spiel anzeigen zu lassen, wenn ein Event aktiv schaltet*
-Schönes Oberflächendesign im Stil des GW2 Login-Screens

*Für PopUps muss GW2 im Fenstermodus oder mit der Einstellung “Vollbild im Fenster” betrieben werden.

Die App ist in Visual Basic WPF mit Visual Studio 2013 geschrieben worden.
Für die Oberflächengestaltung wurde XAML verwendet.

Da ich keine Projekthomepage betreibe, habe ich den Projektordner unter folgender Adresse:
http://www.file-upload.net/download-8735583/GW2-Event-Browser.rar.html
als *.rar-Archiv hochgeladen.

Im Verzeichnis “../bin/Release” findet sich die ausführbare *.exe-Datei.

Systemanforderungen:
- Windows 7, 8 oder 8.1
- .Net-Framework 4.5

Über eure Anregungen, Lob und Kritik würde ich mich sehr freuen, hoffe aber vorallem, dass euch die App von Nutzen sein kann!

Liebe Grüße

**Hier noch ein Screenshot:
http://image-upload.de/image/yjnVu4/bbc1f5b2d4.png

(Zuletzt bearbeitet am von Ich Mkay.4370)

[Windows App]Event-Status mit PopUp und Vorleser

in Fan-Inhalte

Posted by: thoxx.6059

thoxx.6059

Also ich hab mir euer Tool mal angeschaut, nette Idee, aber es hakt leider noch an paar Ecken.
Da ich selber beruflich u.a. mit .NET entwickle, hier mal paar Hinweise und Infos:

  • Beim Drücken auf den manuelles Update Button in den Einstellungen fliegt eine NullReference Exception… im Code wird da versucht einen string auf integer zu casten, da passt irgendwas überhaupt nicht (ist halt auch nur Text drin)
  • beim drücken auf den Filter aktualisieren Button erhalte ich auch immer mal wieder NullReference Exceptions, weil Event_Array NULL ist
  • benutzt doch lieber foreach Schleifen, anstatt for Schleifen, senkt potentielle NullReference Exceptions erheblich, weil man sich selber nicht um irgendwelche Indizes kümmern muss
  • Stringvergleiche bitte mit .equals() und nicht mit == . Also z.B. Map_Filter.equals(“-1”) und !Status_Filter.equals(“-1”) anstatt = und <>. Und wenn ihr direkt string.Equals(Map_Filter, “-1”) nutzt, braucht ihr euch nicht mal um NULL-Prüfungen zu kümmern, für den Fall dass Map_Filter (oder generell ein string) NULL ist, gibt die Methode dann halt false zurück
  • BackgroundWorker würde ich nicht mehr benutzen, dafür gibt es jetzt die Klasse Task aus der Task Parallel Library
  • Casten von Strings auf Int am besten immer mit Int32.TryParse anstatt CInt(), das bringt dann auch keine InvalidCastExceptions, sondern liefert false zurück, wenn nicht geparst werden kann. CInt() benutzt man eigentlich nur, wenn man Daten aus einer Datenquelle hat, wo man vorher nicht weiß was für ein Datentyp da reinkommt
  • gebt euren Controls doch am besten sprechende Namen und nicht sowas wie Button2 und Button3, sinnvoll wäre z.B. btnManuellesUpdate und cbxSoundAktivieren, da sieht man dann schon im Code um welches UI-Element es sich handelt
  • für größere Stringverkettungen den StringBuilder anstatt string+string benutzen, vor allem wichtig in oft benutzten Methoden, weil beim Verketten mit + für jedes Verketten eine Kopie im Speicher angelegt wird. Also wenn man string1+string2+string3+string4 macht, hat man erst string1 im Speicher, dann zusätzlich string1+string2, dann zusätzlich string1+string2+string3 und so weiter
  • ihr habt ungenutzten Code/Variablen drin, z.B. mousex und mousey…nicht gleich am Anfang schon die Codeleichen drin lassen
  • wenn ihr schon am lernen von .NET und WPF seid, schaut euch doch direkt mal das MVVM Design-Pattern an, nach dem Entwurfsmuster wird heutzutage eigentlich mit WPF entwickelt Ist wirklich ein ganz wichtiges Konzept, wo man sich nicht mehr manuell um Füllen und Abrufen von Werten aus Textboxen etc. kümmern muss, sondern dies automatisch über Datenbindung geschieht, da braucht man dann keiner Textbox mehr händisch einen Text zuweisen, passiert alles von alleine

So, für mehr habe ich leider gerade keine Zeit. Ich denke für so ein erstes Projekt ist das schon ganz gut, einfach immer am Ball bleiben und erst mal dem Ding noch bisschen Feinschliff gönnen, zumindest irgendwelche Exceptions sollten dem Nutzer nicht direkt ins Auge springen

P.S.
Es gibt übrigens für die GW2 API eine .NET Implementierung, vielleicht ist das ja für euch interessant: https://gw2dotnet.codeplex.com/

edit

Ich finde es übrigens wirklich gut, dass ihr das Projekt/den Quellcode mit hochgeladen habt, um euch dort noch Vorschläge mit einzuholen

Server: Abaddons Mund
Ingame: Beerax (Waldsäufer) & Entitaet (Wächter)

(Zuletzt bearbeitet am von thoxx.6059)

[Windows App]Event-Status mit PopUp und Vorleser

in Fan-Inhalte

Posted by: Ich Mkay.4370

Ich Mkay.4370

Hallo!

Wow, das ist echt ne ausführliche Analyse

Das mit den stellenweise auftretenden NullReference Exceptions ist mir auch aufgefallen, ich vermute, dass das dann auftritt, wenn die Events gerade geupdated werden…

Ich werde mir auf jeden Fall deine Vorschläge zu Herzen nehmen und versuchen das Tool stabiler zu programmieren, wenn ich einen neuen Stand habe (was wegen Arbeitszeiten etwas dauern kann ), dann aktualisiere ich den Projekt-Link im ersten Post.

Vielen Dank nochmals für die ausführliche Antwort

P.S.: konntest du die Funktionen denn generell nutzen?

[Windows App]Event-Status mit PopUp und Vorleser

in Fan-Inhalte

Posted by: thoxx.6059

thoxx.6059

P.S.: konntest du die Funktionen denn generell nutzen?

Eher nicht so
Ich habe jetzt noch mal bisschen getestet und paar Screenshots dazu gemacht.

Ich geh in die Event-Suche und habe mir einfach mal Gendarran-Felder genommen. Da finde ich schon sehr verwirrend, dass viele Events mehrfach drin stehen.
-> http://i.imgur.com/bvLpNXB.png

Beim Hinzufügen von Events bekomme ich eigentlich immer eine Exception
-> http://i.imgur.com/zsNuJ1d.png

Und im Event-Browser hatte ich den Eintrag dann nach dem Hinzufügen plötzlich mehrfach dran, seeeehr viel mehrfach
-> http://i.imgur.com/wwuVeu5.png

War übrigens sehr mühseelig die Dutzenden Events da rauszulöschen, wenn man immer nur einen löschen kann
Ich fande es auch etwas verwirrend, dass in der ListView Multi-Selection aktiviert ist, man aber nur immer einen Eintrag löschen kann (beim Hinzufügen übrigens genau so). Also entweder Mehrfachselektion deaktivieren oder das Hinzufügen/Löschen von mehreren Einträgen implementieren (würde ich natürlich bevorzugen).

Die Exception kommt dann auch bei jedem Event-Update, ich war vorhin mal 5 Minuten nicht am Rechner (hatte Update-Zeit auf 30 Sekunden gestellt) und hatte dann 10 Messageboxen mit Exceptions auf dem Schirm
-> http://i.imgur.com/TfgARWm.png

Habe dann auch noch einen Bug gefunden. Beim drücken des Event aus dem Browser löschen Buttons ist mir mal eine Exception geflogen. Grund war, dass ihr ein Item ohne NULL-Check fokussiert (Zeile 588). Irgendwann war das Item mal NULL und beim Aufruf von .focus() hat es dann geknallt.

Manchmal hatte ich dann nach dem Löschen von Items plötzlich automatisch zwei Listeneinträge selektiert:
-> http://i.imgur.com/n6gotCs.png

Durch die Exceptions beim Event-Update lässt es sich leider nicht wirklich vernünftig nutzen, da solltet ihr dringend was tun. Zum Testen der Sprachausgabe und so bin ich leider dadurch nicht wirklich gekommen.

Die ganze Verwaltung der Listeneinträge, Arrays und so scheint wohl ziemlich Probleme zu machen, zumal auch die ganzen Zugriffe über Indizes recht fehleranfällig sind. Hier solltet ihr euch echt mal mit Datenbindung beschäftigen und schauen, dass ihr von den Arrays und so weg kommt und die besser handhabbaren ObservableCollections und Listen nutzt. Ich kann auch gern mal per Mail/PN/Messenger o.ä. weiterhelfen, wenn ihr da noch paar Infos/Hilfe braucht.

Server: Abaddons Mund
Ingame: Beerax (Waldsäufer) & Entitaet (Wächter)

[Windows App]Event-Status mit PopUp und Vorleser

in Fan-Inhalte

Posted by: Ich Mkay.4370

Ich Mkay.4370

Soo

Ich habe mich heute mal wieder kurz dran gesetzt und einige passagen im Quellcode angepasst:

  • “manuelles-Update-Button” tut jetzt, was er soll, hier war wirklich fieser Knorz im Code
  • so gut wie alle for-Schleifen in For-Each-Schleifen umgebaut
  • string.equals(strA,strB) eingebaut
  • Die beiden Listviews sind nun auf single Select eingestellt
  • → die mehrfachselektion bei dir kam vermutlich daher, dass wenn 1 Event über den Lösch-Button gelöscht wird, der Fokus auf das erste Listview-Item gesetzt wird, damit der Lösch-Button wieder gedrückt werden kann.

Ich habe das Projekt neu kompiliert und komplett wieder hochgeladen. Den Link im Start Post habe ich editiert, hier kann der aktuelle Stand heruntergeladen werden.

[Windows App]Event-Status mit PopUp und Vorleser

in Fan-Inhalte

Posted by: Ich Mkay.4370

Ich Mkay.4370

/Update

  • Alle Schleifen auf For-each umgestellt
  • sämtliche Strings-Vergleiche auf string.equals umgebaut
  • Sprechende Namen für sämtliche UI-Steuerelemente vergeben und im Code implementiert
  • die “Event-Hinzufügen-Exception” gefixt
  • die vielen wiederkehrenden Exceptions gefixt
  • StringBuilder für Stringverkettung benutzt
  • Fehler bei Map- und Status-Filer gefixt

Die Problematik, dass beim Hinzufügen eines einzigen Events gleich mehrere zum Event-Browser hinzugefügt werden kommt daher, dass zwischen Event-Namen und Event-ID kein Eineindeutiger zusammenhang besteht:
Eine ID passt zu genau einem Event-Namen, ein Event-Name aber zu mehreren Event-IDs.

Hier müsste ich vermutlich noch im hintergrund festhalten, welche ID zum gewünschten, hinzuzufügenden Event gehört, um dann auch wirklich nur dieses hinzuzufügen.

Im großen und ganzen sollte das Tool nun jedoch einiges stabiler laufen

Die Verknüpfung der Event-Namen und IDs werde ich bei Zeiten mal angehen…
davon also später mehr

der Link im Startpost ist editiert, die neueste Version hochgeladen!