Ein und Aus Rechnung in eine TextBox

  • C#

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    So, nun haben wir schon mal eine anständige Beschriftung dessen. Nun kommen die nächsten Punkte:

    ProgressBar: Die Progressbar soll also anzeigen, wie weit eine Box gefüllt ist. Wo kommen diese Daten her ? Sollen die per Hand am Anfang einfach festgelegt werden, oder kommen die anders ins System?

    Wo kommen die Daten her, die die Combobox füllen sollen? Werden die auch im Programm selber initiiert oder kommen die aus einer anderen Datenquelle? ->Da ich nun weiß, dass die CBO zur Auswahl der Artikelnummern ist, wäre die Bezeichnung D3A_ComboBoxArtikelnummern schon treffender. Dann weiß man beim Quellcodelesen bereits, dass es um die Art-Nrn geht. Das aber nur nebenbei.

    Gut das Label darunter zeigt nur an, was in der ComboBox ausgewählt wird. Das ist verständlich. Auch hier wäre der Name nun besser gewählt mit: D3A_TextBoxAusgewaehlterArtikel (oder dergleichen)

    Die TextBox InputStückzahl ist einfach nur eine TextBox, auf die zugegriffen wird.

    Wenn die ComboBox gefüllt ist, kannst du die TextBox dadrunter recht einfach füllen mit:


    C#-Quellcode

    1. private void D3A_ComboBox_SelectedIndexChanged(object sender, EventArgs e) // Produktauswahl durch Artikelnummer
    2. {
    3. D3A_TextBoxOutputProdukt.Text = D3A_ComboBox.SelectedItem.ToString();
    4. }


    Und indem du nun die einzelnen Controls und Variablen ansprichst, kannst du die Werte dann darin speichern.
    Ich fürchte nur, du brauchst noch einige Variablen mehr.

    Und wenn du dein D3A als Objekt erstellst, kannst du das als Vorlage nehmen und einfach weitere "Kopien" erstellen und programmierst die Logik nur einmal und alle nutzen dieselbe Logik aber jeweils für die eigene Instanz. (Stichwort Objektorientierte Programmierung). Damit hast du im Quellcode nicht Button 1- 44, sondern bloß Button 1,2, Combobox 1, Textbox 1 -3 die alle zum Objekt gehören und einfach 10 Objekte, die jeweils diese Daten enthalten.

    Was ich mich jetzt gerade nur frage: Wie viel Erfahrung im Bereich Programmierung hast du? denn mein Codeschnipsel der TextBox zeigt ein sehr simples Beispiel, wie man die Textbox setzen kann. Aber auch die war in deinem ersten Projekt noch nicht implementiert.
    Hi

    erstmal Danke für deine ausführlichen Erklärungen.
    Progressbar: Die Progressbar erhält ihre Infos aus "D3A_TextBoxLagerinhalt" also die spätere Gesamtstückzahl, die nachher in der Box drin ist.
    Die Max. Werte der Progressbar müsste ich dann individuel eintragen, da nicht alle Boxen die selbe grösse haben.

    ComboBox: Die ComboBox fülle ich ( wie in dem neuen Anhang geändert) mit 6 stelligen Zahlen, die bei auswahl ein bestimmtes Produkt in D3A_TextBoxOutputProdukt anzeigt.


    Zu deiner letzten Frage: In Prozent ausgedrückt, haben wir 0,01% Ahnung vom Programmieren.
    Wir sind eine (fast) kleine Rentnertruppe die die sich wie kleine Kinder freuen wenn was funktioniert.

    Deswegen sind wir sehr dankbar, wenn wir mal hier und da ein paar Codeschnitzel zugesteckt bekommen, die wir uns durch Copy and Paste zusammen stecken.


    Weitere Fragen immer gerne ^^

    MfG
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Shigon“ ()

    Damit's hier mal n bisken voran geht und zumindest das Grundlegende erledigt wird:

    C#-Quellcode

    1. public partial class Form1 : Form
    2. {
    3. int aktuelleKistenzahl = 0;
    4. public Form1()
    5. {
    6. InitializeComponent();
    7. D3A_TextBoxLagerinhalt.Text = "0";
    8. }
    9. //[…]
    10. private void D3A_ButtonEinlagern_Click(object sender, EventArgs e) // trägt die Stückzahl in D3A_TextBoxLagerinhalt ein
    11. {
    12. if (!int.TryParse(D3A_TextBoxInputStückzahl.Text, out int TextAsNumber)) return;
    13. aktuelleKistenzahl += TextAsNumber;
    14. D3A_TextBoxInputStückzahl.Clear();
    15. D3A_TextBoxLagerinhalt.Text = aktuelleKistenzahl.ToString();
    16. }
    17. private void D3A_ButtonAuslagern_Click(object sender, EventArgs e) // trägt die Stückzahl in D3A_TextBoxLagerinhalt aus
    18. {
    19. if (!int.TryParse(D3A_TextBoxInputStückzahl.Text, out int TextAsNumber)) return;
    20. if (aktuelleKistenzahl < TextAsNumber) { MessageBox.Show("So viele Kisten sind gar nicht da!"); return; };
    21. aktuelleKistenzahl -= TextAsNumber;
    22. D3A_TextBoxInputStückzahl.Clear();
    23. D3A_TextBoxLagerinhalt.Text = aktuelleKistenzahl.ToString();
    24. }


    Zur kurzen Erläuterung, bevor ich mich aus diesem Thread entferne:
    Zeile#3 macht dem Compiler erstmal eine Ganzzahlvariable namens aktuelleKistenzahl bekannt.
    In Z#8 wird 0 als Starttext festgelegt und deshalb zu Programmbeginn angezeigt.
    In Z#15 und #23 wird der eingegebene Text hergenommen und geprüft, ob er in eine Ganzzahl ungewandelt werden kann. Falls das nicht geht (weil z.B. irgend ein findiges Forenmitglied Roulade mit Klößen eingibt :rolleyes: ), wird die Methode verlassen und es passiert nix.
    In Z#24 wird zusätzlich geprüft, ob man soviel von der Gesamtzahl abziehen kann, wie eingegeben wurde. Falls das nicht geht, wird gemeckert.
    In Z#16 und #25 wird dann endlich mal der Gesamtbestand geändert, in den Folgezeilen der Inhalt der Eingabetextbox geleert und dann das Gesamtergebnis in der Ergebnistextbox angezeigt.

    Genug der Grundlagen, denn (sorry, ich muss es leider sagen) das Forum ist nicht dafür da, dass man das Programmieren beigebracht bekommt.

    ##########

    @PadreSperanza: btw: Welches Sinn ergibt die Benennung der Controls mit dem Präfix D3A? Jetzt fangen alle Controls so an und damit ist nix gewonnen. Ein Control sollte so benannt werden, dass man den Sinn erkennt, ggf. kombiniert mit dem Controltyp. Aber D3A_ButtonEinlagern hat (derzeit zumindest) keinen Mehrwert gegenüber ButtonEinlagern.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VaporiZed“ ()

    VaporiZed schrieb:

    @PadreSperanza: btw: Welches Sinn ergibt die Benennung der Controls mit dem Präfix D3A? Jetzt fangen alle Controls so an und damit ist nix gewonnen. Ein Control sollte so benannt werden, dass man den Sinn erkennt, ggf. kombiniert mit dem Controltyp. Aber D3A_ButtonEinlagern hat (derzeit zumindest) keinen Mehrwert gegenüber ButtonEinlagern.


    Ja, da gebe ich dir zu 100% Recht - außer man ist nicht im OOP unterwegs. So wie es bei der Mappe, die ich runtergeladen hatte, der FAll war. Da waren keine 10 Objekte hinterlegt, die allesamt einen ButtonEinlagern hatten, sondern 20 Buttons, die einfach Button1 - Button20 hießen. Wenn man schon keine OOP nutzt (warum auch immer), sollte man zumindest die Zugehörigkeit der Controls zu ihrem Bereich kennzeichnen.

    Sobald man natürlich aus all diesen Elementen ein eigenes Objekt. Also zum Beispiel die "LagerBox" macht. Dann enthält diese natürlich einen ButtonEinlagern und ButtonAuslagern und du sprichst sie mithilfe des Objekts an. ZB.: D3A.ButtonEinlagern. Die nächste Kiste hätte ja auch D4B heißen können und hätte D4B.ButtonEinlagern.

    Fakt ist aber: In der Projektmappe, die ich gesehen habe, war alles ungeordnet enthalten - und da wollte ich zumindest soweit Ordnung reinbringen, dass man zumindest semantisch versteht, was wohin gehört. Und wenn du in die erste Projektmappe geschaut hättest, hättest du gesehen, dass es nicht nur D3A, sondern auch D3B, D3C, D4A, D4B,..... D8C gegeben hätte. Und das wäre hier nun doch sehr unübersichtlich, wenn sie einfach nur alle ButtonX hießen. oder irre ich mich?

    So nun zurück zum Thema: Mit diesem gesamten Code wäre das Programm (Beispiel Mini) lauffähig und macht - denke ich - das, was du möchtest:

    C#-Quellcode

    1. ​int aktuelleKistenzahl = 0; //Aktuelle Anzahl an Kisten in Box
    2. int maximaleKapazität = 30; //Maximale Anzahl an Kisten, die in der Box ein können
    3. public Form1()
    4. {
    5. InitializeComponent();
    6. D3A_TextBoxLagerinhalt.Text = "0"; // Hier wird die Anzahl an Kisten in der Box am Anfang des Programms auf 0 gesetzt
    7. D3A_ProgressBar.Maximum = maximaleKapazität; //Hier wird der Kisten-Progressbar zugewiesen, wie das Maximum lautet
    8. }
    9. private void D3A_ComboBox_SelectedIndexChanged(object sender, EventArgs e) // Produktauswahl durch Artikelnummer
    10. {
    11. D3A_TextBoxOutputProdukt.Text = D3A_ComboBox.SelectedItem.ToString(); //Hier wird der Artikel ausgewählt
    12. }
    13. private void D3A_ButtonEinlagern_Click(object sender, EventArgs e) // trägt die Stückzahl in D3A_TextBoxLagerinhalt ein
    14. {
    15. if (!int.TryParse(D3A_TextBoxInputStückzahl.Text, out int TextAsNumber)) return;
    16. aktuelleKistenzahl += TextAsNumber;
    17. D3A_TextBoxInputStückzahl.Clear();
    18. D3A_TextBoxLagerinhalt.Text = aktuelleKistenzahl.ToString();
    19. D3A_ProgressBar.Value = Convert.ToInt32(D3A_TextBoxLagerinhalt.Text); //Hier wird der Prgressbar anschließend signalisiert, dass sie sich aktualisieren soll.
    20. //Es wird der Wert Lagerinhalt genommen und angezeigt in der Progressbar
    21. }
    22. private void D3A_ButtonAuslagern_Click(object sender, EventArgs e) // trägt die Stückzahl in D3A_TextBoxLagerinhalt aus
    23. {
    24. if (!int.TryParse(D3A_TextBoxInputStückzahl.Text, out int TextAsNumber)) return;
    25. if (aktuelleKistenzahl < TextAsNumber) { MessageBox.Show("So viele Kisten sind gar nicht da!"); return; };
    26. aktuelleKistenzahl -= TextAsNumber;
    27. D3A_TextBoxInputStückzahl.Clear();
    28. D3A_TextBoxLagerinhalt.Text = aktuelleKistenzahl.ToString();
    29. D3A_ProgressBar.Value = Convert.ToInt32(D3A_TextBoxLagerinhalt.Text);//Hier wird der Prgressbar anschließend signalisiert, dass sie sich aktualisieren soll.
    30. //Es wird der Wert Lagerinhalt genommen und angezeigt in der Progressbar
    31. }
    32. }


    Aber ein wenig muss ich VaporiZed zustimmen: Im Grunde sind das keine Fragen zum Verständnis oder zur allgemeinen Problematik, sondern eher die Frage danach, ob wir ein Programm schreiben können, dass die gewünschten Funktionen ausführt. Aber ich meine, dafür gibt es im Forum auch einen Bereich, wo man so etwas fragen kann - wenn ich mich hier nicht täusche
    Hallo

    Danke erstmal vielmals Euch beiden für Eure Hilfe und Zeit die ihr geopfert habt.
    Das das Forum hier kein Lernkurs ist, ist mir bewusst. Habe auch nie gesagt das ich überhaupt was mit Programmierung zu tun hatte/habe.
    Hätte auch nicht gedacht, daß dieses, im Grunde kleine Programm so eine Komplexität hat (vergleich zum Excel Code). (Da spricht der Unwissende :whistling: ).

    Aber, Ihr habt eine kleine Gruppe sehr glücklich gemacht :rolleyes:

    Ich werde mich nachher mal ran machen und alles übertragen.



    Vielen dank und nehmt es mir bitte nicht mehr übel 8-)

    MfG

    Nachtrag
    oh,wenn die Stückzahl überschritten wird, stürzt die ProgressBar bzw. das Programm ab.
    Hab ich was übersehen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Shigon“ ()

    Die ProgressBar hat einen MaxValue. Den müsstest Du ggf. anpassen, also DeineProgressBar.Maximum = WasAuchImmerDieMaximalzahlIst
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich könnt jetzt sagen: Damit Du nicht den effektiv gleichen Code 20x hast, nimm ein UserControl, aber ich schätze, dass das jetzt nicht weiterhilft und die Kapazitäten übersteigt …
    Und solche Späße wie Convert.ToInt32(D4CLagerinhalt.Text) kannste Dir sparen, denn Du hast jeweils die entsprechende "Echt"Zahl bereits in der Variable TextAsNumber
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    mit Passwortschutz - geile Sache :thumbdown:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()