Komisches Verhalten von einem.net Programm

Bellm

Grünschnabel
Also ich hab hier etwas sehr komisches.....

Also ich habe ein Programm geschrieben.
Das Programm wurde auf mehrer Rechner in der Firma verteilt, alle Rechner haben die gleiche SOftware installiert: ( Windows 2000, vom Admin verteilt, Framework 2.0 & 1.1 sind installiert)

So und jetzt das kuriose:
Benutzer A kann das Programm ohne Probleme starten
Benutzer B kann das Programm nicht starten....

Das Problem ist benutzerabhängig, An einem Rechner kann A das Programm starten wenn er angemeldet ist, und wenn Benutzer B angemeldet ist geht es nicht, gleiches gilt für andere Rechner

Bei Benutzer B crasht das Programm in einer if Abschleife, in die er eigentlich nicht stoßen sollte. Das Feld lblArbeitszeitdatum.text ist ein leeres Feld
Code:
If lblArbeitszeitDatum.Text = "" Then

Else
.....Typumwandlung

Bei Benutzer A ist die Bedingung erfüllt, und er überspringt denn else Teil
Benutzer B springt in den Else Teil und erhält die Fehlermeldung
"Conversion from string "" to type Double is not valid

Die Lösung hab ich auch schon gefunden: wenn ich nach String.empty abfragen,laufen bei beiden das Programm.
Aber leider kann ich das Problem nicht definieren....
Ich würde jetzt gerne aber wissen warum es in diesem Fall bei einigen Usern läuft und bei anderen nicht... Vielleicht kann mir jemand weiterhelfen
 
Das wird dir niemand ohne deinen Code sagen können. Beim einen Benutzer enspricht der string in deinem Label eben nicht einem korrekten Double. Keine Ahnung, ob du das Label Benutzerabhängig füllst oder ob das mit den Benutzern zufall ist. An .NET liegts nicht ;)
 
Komisches Verhalten von einem.net Programm
Hast du mal ein ernstes Wort mit deinem Programm gesprochen, und es ermahnt, in Zukunft ernst zu sein und anständig zu funktionieren?

^^ Sorry, aber den konnte ich mir bei dieser Überschrift nicht verkneifen, da ich erst letzte Woche mal wieder den Klassiker "Wartungsberichte der Qantas" gelesen habe ;-)
 
ich finde es gerade weniger lustig.......

Die Problematik dass am gleichen Rechner es bei einer Person läuft und bei der anderen nicht....

Code:
If lblArbeitszeitDatum.Text = "" Then

liefert bei person a true
liefert bei person b false

bei
Code:
If lblArbeitszeitDatum.Text = string.empty Then
liefert es für Person a und person b true

und zwar beim Starten des Programms, also es ist noch keine Oberfläche vorhanden wo der user dran rumspielen könnte. also user seine schuld entfällt.
Ich würde gerne wissen ob man Einstellungen vornehmen kann die zu dieser Fehlermeldung führt.
 
Da bei Person B die If-Abfrage in den Else-Teil springt, ist es eine zwingende Konsequenz, dass das Label eben keinen leeren String beinhaltet.

Ladest du irgendwelche benutzerdefinierten Daten (aus INI, Registry, DB) bevor die Oberfläche erscheint?

Es ist IMHO dann am wahrscheinlichsten, dass du irgendwelche User-definierten Initialisierungsdaten lädst, den Controls zuweist, und dann die Oberfläche lädst.

Benutzer A hat eben korrekte Init-Daten, User B eben nicht.

Und sorry, falls dir mein Humor zu nahe getreten ist. Ich weiss selbst, wie frustrierend so etwas sein kann.
 
nein, hab selber drüber lachen müßen:
Aber als ich das Programm zu einer Besprechung in Outlook einladen wollte hat es einfach so abgesagt.... :(

nein jetzt aber mal im ernst:
Zu ini Files ect:
Ja, ich lade welche, aber erst in der form_load....
aber der fehler tritt zeitlich gesehen vorher auf

ich hab extra noch eingebaut, dass die Variablen mitgeloggtt werden. Dabei kaum auch das genau gleiche heraus(Bei Person A und auch bei Person B, die die Fehlermeldung bekommt.)

Das eigentliche Interessante ist:
ich benutze einen Datetimepicker und der fehler tritt in datetimepicker.valuechanged auf.
Beim LAden der Oberfläche springt er öfters in die datetimepicker.valuechanged hinein.
Das erste Mal wahrscheinlich wenn der Datetimepicker auf der Oberfläche erstellt wir.
Das zweite Mal springt er rein, wenn in der form_Load der Datetimepicker das heutige Datum zugewiesen bekommt.

Beim ersten Mal ist laut log ein Label auf der Oberfläche leer
beim Zweiten mal ist laut log das Label den text, den ich im designer angegeben habe, drin.

Also wird während des Aufbau der Make schon Ereignisse bahandelt.
Ist das üblich?
 
Zuletzt bearbeitet:
hmm, wenn man mal überlegt:
Eine Form hat Steuerelemente, diese haben Ereignisse sowie Prozeduren/Funktionen, welche ausgeführt werden, sobald das Steuerelement erstellt wird.

Wenn ich mich noch richtig erinner, wird Form.visible=true als letztes ausgeführt, welches dann das Paint-Ereignis der Form auslöst (Sorry, falls die Namen der Events nicht korrekt sind, ich code sonst nur in VBClassic, aber hier gehts ja eher um eine prinzipielle Funktionsweise).

Ergo kann man hieraus schlussfolgern, dass Ereignisse von Steuerelementen, welche sich auf einer Form befinden, schon getriggert werden, bevor die Oberfläche sichtbar ist, zumal das Laden einer Form (1) und das Sichtbar-machen einer Form (2) zwei getrennte Vorgänge sind, wobei 2 nur nach 1 vorkommen kann, jedoch 1 ohne 2 ausgeführt werden kann (Bsp. Laden im Hintergrund)
 
ich würde bei mir daraus schlussfolgern, dass während des Ladens der Oberfläche, diese weder sichtbar noch vollständig geladen, die Ereignisbahndlung schon ausgeführt wird...

Aber warum gibt die Abfrage bei manchen Usern true und bei anderen false
und zwar Rechnerunabhängig?
 
ich würde bei mir daraus schlussfolgern, dass während des Ladens der Oberfläche, diese weder sichtbar noch vollständig geladen, die Ereignisbahndlung schon ausgeführt wird...

Aber warum gibt die Abfrage bei manchen Usern true und bei anderen false
und zwar Rechnerunabhängig?

Tja, darauf habe ich auch keine Antwort, aber ich frage mal anderst herum:

Dein Problem ist, dass er bei der IF-Abfrage in den Else-Teil springt (Label.Text ist nicht leer), worauf dann der Fehler bei der Typ-Umwandlung stattfindet. Richtig?

Zwinge doch deine Oberfläche solange das Label.Text auf leer stehen zu lassen, bis die Form vollständig da ist, und den DateTimePicker dann ins Paint-Ereignis der Form schieben, sodass die DateTimePicker-Geschichte erst ausgeführt wird, wenn die Form geladen und sichtbar ist.

BTW: Per Ferndiagnose ist sowas immer schwer, also falls ich jetzt nen Mist erzählt habe, bitte das Gelächter hier reinschreiben! ^^
 
ist eine gute Idee, werde ich gleich nächste woche versuchen, jetzt mach ich erstmal feierabend und morgen hab ich frei :)

Vielen Dank für deine Hilfe
 
Zurück