Zum Inhalt springen

[c#]Variablen bekannt machen?!


Fraggla

Empfohlene Beiträge

Hey ho.

Ich hab mal wieder ein Problem...

Ich schreibe gerade meine erste Anwendung, die in Textfiles schreibt.

Damit meine Zeilen nicht überschrieben werden, hab ich mir folgendes gebastelt:

private void btnGehen_Click(object sender, EventArgs e)

        {

            int ZN = 1;

            string Prüfung;

            while ((Prüfung = NewTime.ReadLine(@"C:\WinZeitLog.txt", ZN)) != "")

            {

                ZN++;

            }


            string Gehen = DateTime.Now.ToShortTimeString();

            NewTime.WriteLine(@"C:\WinZeitLog.txt", ZN, "Gehen: " + Gehen, false);

Den Inhalt von ZN würde ich gerne auch bei anderen Buttons verwenden.

Allerdings hab ich leider keine Ahnung wie ich das ganze Global definieren kann. Wäre schön wenn man mir hier mal wieder einen Denkanstoß geben könnte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

den StreamWriter hab ich in ner seperaten Klasse, der wird per NewTime.ReadLine o.ä Befehle aufgerufen.

Andere Frage:

Ich versuche gerade nen Counter zu basteln, der sich erhöht, sobald der jeweilige Knopf gedrückt wird.

Resultat soll sein, dass bei meiner Arbeitszeituhr Kommen und Gehen durch nummeriert wird. Leider ignoriert er meinen increment immer:

int Counter = 0;

            Counter++;



            int ZN = 1;

            string Prüfung;

            while ((Prüfung = NewTime.ReadLine(@"C:\WinZeitLog.txt", ZN)) != "")

            {

                ZN++;

            }       



            string Gehen = DateTime.Now.ToShortTimeString();

            NewTime.WriteLine(@"C:\WinZeitLog.txt", ZN, "Gehen"+Counter+": " + Gehen,false);

Eine von x-varianten die ich bisher durchprobiert habe.....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Je nachdem, wo du deinen Counter definierst, hat das eine andere Bedeutung.

Wenn du eine Variable in der Methode anlegst, ist sie lokal. Sie wird jedesmal beim Betreten der Funktion neu angelegt, und am Ende verliert sie ihre Gültigkeit.

Das ist dasselbe Problem wie vorher, und eigentlich absolutes Grundlagenwissen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe nunmal leider kein Buch hier und manche der OpenBooks die ich durchgelesen habe empfand ich persönlich als nicht wirklich verständlich, sowie zu theoretisch, als dass ich das anschließend noch alles Wissen könnte.

Daraus resultiert, dass ich ein Grundlagenwissen habe, welches eher einem schweizer Käse ähnelt.

D.h ich betreib hier Try & Error bis ich endlich Berufsschulunterricht bekomme, sollte ich euch mit meinen Fragen nerven, werd ich nicht mehr posten.

Ansonsten Danke für den Hinweis, darauß lässt sich weiter etwas erarbeiten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Fragen können nicht nerven. Man muss sie ja nicht beantworten. ;-)

Falls Du noch kein Basiswissen haben solltest, wäre es in meinen Augen wichtig, erst Mal diese zu kennen.

Man kann z.B. ne Klasse definieren, mit zwei / drei Methoden. Diese Methoden manipulieren interne Member-Variablen. Diese kann man dann mit einer weiteren Methode ausgeben. So lernst Du, wie / welche Variablen / Properties wo ihre Gültigkeit haben.

Ich persönlich werde keinen Code posten, solange der Fragesteller sich offensichtlich keine Gedanken über seinen Code macht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe nunmal leider kein Buch hier und manche der OpenBooks die ich durchgelesen habe empfand ich persönlich als nicht wirklich verständlich, sowie zu theoretisch, als dass ich das anschließend noch alles Wissen könnte.
Wir haben eine Tutorial-Liste im Forum oben angepinnt.

Daraus resultiert, dass ich ein Grundlagenwissen habe, welches eher einem schweizer Käse ähnelt.

D.h ich betreib hier Try & Error bis ich endlich Berufsschulunterricht bekomme, sollte ich euch mit meinen Fragen nerven, werd ich nicht mehr posten.

Nein, kein Problem. Ich wollte nur anmerken, auf welchem Level deine Verständnisprobleme liegen. Das ist nicht jedem so klar wie dir.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Tutorial-Liste habe ich selbst sogar noch ergänzt.

Das Problem welches ich mit den meisten Tutorials habe ist, dass die meisten eben mMn viel zu trocken sind.

Ich hab bestimmt 5x versucht das hoch gelobte "Golo Roden C# Buch" zu lesen und ich finds einfach nur grottig.

@Ibm Ich mach mir sehr wohl Gedanken über meinen Code. Ansonsten würde ich nich lange bevor das Problem auftritt wissen, dass ich Werte in mehreren Variablen benötige.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt im nachhinein natürlich.

Sie wird jedesmal beim Betreten der Funktion neu angelegt, und am Ende verliert sie ihre Gültigkeit
war der Knackpunkt.

Hat keine 5 Minuten gedauert, da hatte ich das erfolgreich geändert.

Den Fehler werd ich so in der Form nun hoffentlich nicht mehr machen. Danke nochmal :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

LBM1305 Nur klein ;-)

Ich habe auch nicht das Gegenteil behauptet. Manchmal muss man auch keinen Code posten. :-O

is dir schon mal aufgefallen das deine Beiträge nicht die Frage/das Problem des erstellers beantwortet/hilfreich ist ? Du antwortest zu jedem Thread und wenn er wie hier fragt wo sein problem ist/ wie ers besser machen könnte kommst du mit dem StreamWriter daher ? du kommst mit irgend einer fu Klasse daher, er weis ned mal was ne Membervariable is, und dann soll er den StreamWriter usen das er später mal ein 0815 Coder is der ohne .NET Klassen nix kann ...

Sry soll keine blöde anmache sein aber ne feststellung das dein Senf immer dabei is aber ned wirklich hilfreich und zum Problem passend sicher kann mans so machen wie du sagst aber is das so gut für anfänger ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dank dir für die Links 2k1.inc ich werd sie morgen durcharbeiten, dazu komm ich leider heute nicht mehr.

@Topic:

Das erste Problem ist zwar gelöst, jedoch hab ich jetzt ein ähnliches Problem wozu mir noch keine Lösung eingefallen ist:

Problem:

Jeder Mitarbeiter Kommt und Geht logischerweise mehrmals täglich, drückt also den Kommen und Gehen Button mehrfach. Außerdem will ich die Zeitspannen ausrechnen und 2 Textboxen mit der insgesamten Pausenzeit und der insgesamten Arbeitszeit anzeigen lassen.

Lösungsansatz:

string array deklarieren, Werte in Array abspeichern, Array abrufen, in Zeit umwandeln und dann die Zeitspanne daraus berechnen. Dann das ganze in eine Textbox -> Fertig.

Ist der Grundsatzgedanke richtig, oder passt da noch was nicht?

@all:

Ich bin für jeden Post, solange er keine persönliche Beleidigung oder ähnlich sinnfreie Flames darstellt, dankbar. Wäre schön wenn ihr hier keinen Flamewar drauß macht :>

Link zu diesem Kommentar
Auf anderen Seiten teilen

... und dann soll er den StreamWriter usen das er später mal ein 0815 Coder is der ohne .NET Klassen nix kann ...

Nimms mir nicht übel, aber im Umfang eines Frameworks zu entwickeln und dann das Framework nicht zu benutzen zeugt nicht gerade davon das der Zweck eines Frameworks verstanden wurde.

Und Klassen wie Streamwriter etc. gehören zu den .Net-Basics, die sollte man schon mitnehmen wenn es sich ergibt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nimms mir nicht übel, aber im Umfang eines Frameworks zu entwickeln und dann das Framework nicht zu benutzen zeugt nicht gerade davon das der Zweck eines Frameworks verstanden wurde.

Und Klassen wie Streamwriter etc. gehören zu den .Net-Basics, die sollte man schon mitnehmen wenn es sich ergibt

wenn er nicht mal weiß was ne MEMBERVARIABLE ist wie soll er das Framework checkn ?

@Frraggla

Zeitberechnen solltest du am besten mit der DateTime und der TimeSpan Klasse lösen.

Prinzip ist easy zu verstehn du gehst folgendermaßen vor.

Du willst die aktuelle Zeit speichern, weil einer z.B. Rauchen geht.

DateTime startTime = DateTime.Now; 
Er ist wieder da nun speicherst du wieder die aktuelle Zeit.
DateTime endTime = DateTime.Now; 
die Zeit dazwischen ermittelst du so
TimeSpan duration = endTime - startTime; 
in duration hast du nun die aktuelle Zeit die er beim Rauchen war. Kürzere Schreibweise wär auch statt die endTime in ner Variable zu speichern einfach
TimeSpan duration = DateTime.Now - startTime; 

Du brauchst nicht dringend ein Array weil du könntest die Arbeitszeit in einem

TimeSpan speichern und jedesmal dazu Addieren

hoff des löst dein Problem.

Link zu diesem Kommentar
Auf anderen Seiten teilen

daher, er weis ned mal was ne Membervariable is, und dann soll er den StreamWriter usen das er später mal ein 0815 Coder is der ohne .NET Klassen nix kann ...

Sry soll keine blöde anmache sein aber ne feststellung das dein Senf immer dabei is aber ned wirklich hilfreich und zum Problem passend sicher kann mans so machen wie du sagst aber is das so gut für anfänger ?

Dann sollen die Anfänger auch von Anfang an beginnen. Datentypen, Klassen, Methoden, Properties. Wer sich gleich mit komplizierten Dingen auseinandersetzt, der SOLL Ahnung von den Basics haben.

Ich habe die Klasse ausserdem nicht nur erwähnt, sondern auf die MSDN verwiesen. Und da sind weiß Gott nicht nur irgendwelche Auszüge von Code drin. Wenn Du den Link verfolgt hättest, dann würdest Du es sehen. Und wenn man den StreamWriter / StreamReader benutzt, dann fällt auch der komische Counter weg, der ja anscheinend das ganze Übel war.

Und jemanden nur etwas vorkauen ist nicht meine Art. Der Threadersteller oder der der das Problem hat, soll sich auch selber Gedanken machen und da kann ein Verweis zu einer komfortableren Lösung schon hilfreich sein. Außerdem besteht gleich ein Lerneffekt.

EDIT: Für die Anfänger, die nicht lesen wollen, hier eine schöne Webcast-Serie zum Thema C#-Anfänger: Webcast: Einführung in das .NET Framework (Teil 1-10) - Strings: Alles mit Texten, oder? | MSDN Online

Bearbeitet von lbm1305
Link zu diesem Kommentar
Auf anderen Seiten teilen

er fragt warum der counter nicht das macht was er soll deine antwort war warum er nicht den StreamWriter used ? was hat das aber damit zu tun das der counter nicht das macht was er soll ? Rein gar nix deine Antwort war nur ein andrer lösungsweg... wie fast auch immer bei deinen antwortn auf fragn

nimms ned persönlich ich wollt dir nur mal sagen du solltest vll mal konkret auf das Problem eingehn und versuchen das zu lösen auch wenns andere/bessere lösungen gibt aber vll mal sein Problem lösn und danach anregungen wie ers besser machen könnte...

Bearbeitet von 2K1.INC
Link zu diesem Kommentar
Auf anderen Seiten teilen

Was soll denn daran verkehrt sein, jemand darauf hinzuweisen, dass es auch einfacher geht? Vielleicht löst sich ja damit sein Problem?

Der Counter dient doch dazu, die Anzahl der Zeilen auszugeben? Das geht doch auch mit'nem StreamReader?! Also ist es doch zum Thema?

Wenn ich immer meine Fragen (bzw. die Antwort) beharrt hätte, dann wäre ich noch beim Anfängerlevel. Dank solcher Hinweise geht es vielleicht mit dem Lernfortschritt schneller, jedenfalls hab ich davon profitiert. Aber wenn das hier das Niveau sein soll, dann bitte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@2k1.inc

leider nein. Timespan kenne ich soweit schon, jedoch sind Kommen und Gehen jeweils seperate Buttons.

Ich poste mal meinen Code von den Buttons:

public void btnKommen_Click(object sender, EventArgs e)

        {

            Counter++;


            if (Counter % 2 == 1)

            {

                if (cbZeit.Checked)

                {

                    Kommen = txtKommen.Text;

                    Kommen = Kommen.Replace(".", ":");

                    Kommen = Kommen.Replace(",", ":");

                    DateTime KommenZ;

                    if (DateTime.TryParseExact(Kommen, format, CultureInfo.InvariantCulture,

                        DateTimeStyles.None, out KommenZ))

                    {

                        int ZN = 1;

                        string Prüfung;

                        while ((Prüfung = NewTime.ReadLine(@"C:\WinZeitLog.txt", ZN)) != "")

                        {

                            ZN++;

                        }


                        NewTime.WriteLine(@"C:\WinZeitLog.txt", ZN, "Kommen" + Counter + ": " + Kommen, false);

                        txtKommen.Text = Kommen;

                        MessageBox.Show("Manuelle Buchung gespeichert");

                        KommenZs[i] = Kommen;

                        i++;


                    }

                    else

                    {

                        MessageBox.Show("Ungültiges Zeitformat!");                       

                    }

                }

                else

                {

                    string Kommen2 = DateTime.Now.ToShortTimeString();

                    int ZN = 1;

                    string Prüfung;

                    while ((Prüfung = NewTime.ReadLine(@"C:\WinZeitLog.txt", ZN)) != "")

                    {

                        ZN++;

                    }


                    NewTime.WriteLine(@"C:\WinZeitLog.txt", ZN, "Kommen" + Counter + ": " + Kommen2, false);

                    txtKommen.Text = Kommen2;

                    KommenZs[i] = Kommen;

                    i++;                    

                }

            }

            else

            {

                MessageBox.Show("Kommen bereits gebucht!");

                Counter--;

            }            

        }

        private void btnGehen_Click(object sender, EventArgs e)

        {

            Counter++;


            if (Counter % 2 == 1)

            {

                MessageBox.Show("Gehen bereits gebucht!");

                Counter--;

            }

            else

            {

                if (cbZeit.Checked)

                {

                    string Gehen = txtGehen.Text;

                    Gehen = Gehen.Replace(".", ":");

                    Gehen = Gehen.Replace(",", ":");

                    DateTime GehenZ;

                    if (DateTime.TryParseExact(Gehen, format, CultureInfo.InvariantCulture,

                        DateTimeStyles.None, out GehenZ))

                    {

                        int ZN = 1;

                        string Prüfung;

                        while ((Prüfung = NewTime.ReadLine(@"C:\WinZeitLog.txt", ZN)) != "")

                        {

                            ZN++;

                        }


                            NewTime.WriteLine(@"C:\WinZeitLog.txt", ZN, "Gehen" + Counter + ": " + Gehen.PadLeft(2,pad), false);

                            txtKommen.Text = Gehen;

                            MessageBox.Show("Manuelle Buchung gespeichert");

                            GehenZs[bi] = Kommen;

                            bi++;

                    }

                    else

                    {

                        MessageBox.Show("Ungültiges Zeitformat!");

                    }

                }

                else

                {

                    string Gehen2 = DateTime.Now.ToShortTimeString();

                    int ZN = 1;

                    string Prüfung;

                    while ((Prüfung = NewTime.ReadLine(@"C:\WinZeitLog.txt", ZN)) != "")

                    {

                        ZN++;

                    }


                    NewTime.WriteLine(@"C:\WinZeitLog.txt", ZN, "Gehen" + Counter + ": " + Gehen2.PadLeft(2,pad), false);

                    txtGehen.Text = Gehen2;

                    GehenZs[bi] = Kommen;

                    bi++;

                }

            }

        }

1ste If Abfrage: Verhindert, dass Kommen 2x hintereinander gebucht wird

2te If Abfrage: Überprüft ob die Zeit manuell eingetragen werden soll, oder automatisch die aktuelle Zeit.

Wenn mir jemand sagen könnte, wie ich am besten die einzelnen Kommen + Gehen am besten in verschiedene Variablen abspeichern kann, wäre das für mich ein großer Schritt nach vorne.

Falls der Code für "meinen" Streamwriter benötigt wird, kann ich ihn gerne posten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um nicht 2mal hintereinander Kommen drücken zu können solltest du lieber

mit Enabled arbeiten(bietes jedes Steuerelement).

btnKommen.Enabled = false; 

          btnGehen.Enabled = true; 

nur mal so ne frage du willst ja ein Zeiterfassungsprogramm schreiben, doch soll er nur die Arbeitszeit/Pausezeit erfassen oder soll er alles erfassen jedes kommen/gehen ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich getraue mir gar nichts zu sagen. :-/

Ich warte erstmal auf den konstruktiven Vorschlag vom Chefkritiker.

*gib keks* bleib mal locker war ja ned böse gemeint und wenn du kritik ned verträgst solltest daran arbeitn... mein vorschlag hier wär ganz klar neu aufziehn des programm bekommst ja augenkrebs drauf (strings mit == vergleichen oder wurde button 2mal hintereinander geklickt mit counter % 2 auswertn ) aber da er neuling is kannst du ned erwarten das es wie bei einem aussieht der des schon ne zeitlang macht... zudem erstmal auf seine antwort warten wegen der frage ob alles geloggt wird oder ned-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...